mysql - 如何通过字符串连接两个表?
问题描述
我需要根据一串 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 可能会更好,但我应该如何使用它呢?谢谢你
解决方案
您可以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
您应该规范化您的架构不要将关系存储为逗号分隔值。
推荐阅读
- flutter - Flutter hot reload 和 Navigator.push in onTap
- java - 是否有一种内存有效的方法来转换输入流编码
- angular - Angular 6 组件没有父样式
- javascript - 如何使 Excel VBA 自动单击 IE 中的 javascript a href 链接
- c# - 向 Asp.Net Core 添加自定义提供程序
- apache-kafka - 我们可以在 Spring Boot 中使用多个 kafka 模板吗?
- javascript - 使用带有 $GetJson 功能的传单搜索插件
- apache - 如何在没有 Kerberos 的 Dataproc 集群上对通过 Livy 发送作业的用户进行身份验证
- android-studio - 禁用针对特定于 Android Studio 的目录的防病毒扫描是否不安全?
- angular - 订阅行为主题