首页 > 解决方案 > 如何通过字符串连接两个表?

问题描述

我需要根据一串 ID 连接两个表。到目前为止,这是我的查询。

SELECT sc.size_id from subcategories s 
join categories c on c.id = s.categories_id 
join size_categories sc on sc.categories_id = c.id ;

结果是

size_id 
1,2,5       
1,2,5   
4,2,1   
4,2,1   
1,2,5   
1,2,5       
4,2,1   
4,2,1   
4,2,1   
4,2,1   
7,2,9       
3,4,6   
3,4,5   

sc.size_id 是一个字符串,其值类似于 =>1,2,3 我需要加入其他表并根据字符串中的上述 ID 获取名称。表名是大小,其值类似于

id    name
1     2m
2     3m
3     4m

我试过这个,但无法获得价值

SELECT sz.name,sc.size_id from subcategories s 
join categories c on c.id = s.categories_id 
join size_categories sc on sc.categories_id = c.id 
join sizes sz on (find_in_set(sz.id,sc.size_id)>0)

我的 size_categories 表是

id     size_id   categories_id  
1       1,2,5              1    
    
    
    
    
2       9,2,8               2   
    
    
    
    
3      3,4,6               3    
    
    
    
    
4      4,2,1                4   

我想我需要使用 group_concat,但它会将所有内容分组,所以 group_by 可能会更好,但我应该如何使用它呢?谢谢你

标签: mysqlsql

解决方案


您可以group_concat通过 on 与组一起使用sc.size_id

select s.name,sc.size_id,group_concat(sz.name)
from subcategories s 
join categories c on c.id = s.categories_id 
join size_categories sc on sc.categories_id = c.id 
join sizes sz on (find_in_set(sz.id,sc.size_id)>0)
group by s.name,sc.size_id

如果您仍然得到重复的尺寸名称,请distinct在里面使用group_concat

您应该规范化您的架构不要将关系存储为逗号分隔值。


推荐阅读