【发布时间】:2017-11-27 19:18:02
【问题描述】:
我有如下三个表,每个产品可能属于多个类别。
产品表作为 P
1.身份证
2. 姓名
类别表为 C
1.身份证
2. 姓名
关系表作为 R
1.身份证
2. P_ID
3. C_ID
现在我想获取产品表中所有产品的列表,以及它们所属的类别名称显示。
如何编写此查询?
我可以从同一个查询中获取类别 ID,但不知道如何获取所有名称。这是我尝试过的。
select p.*,y.*
from p
left join (select p_id,group_concat(c_id) as category_ids
from relation group by p_id) as y on p.id=y.p_id
【问题讨论】:
-
只是提一下...您通常不希望将所有(ID,名称,...)都塞进这样的字符串中,特别是如果您打算稍后解析它。除其他问题外,现在您无法可靠地使用包含逗号的类别名称。
-
感谢您提醒我这一点,我将使用分隔符而不是逗号。
-
您可能选择的大多数其他分隔符都会让您遇到同样的问题。如果您坚持在一个字段中将内容连接在一起(这只是自找麻烦,IMO),那么您的分隔符必须是永远不会合理出现在类别 ID/名称中的分隔符(例如,我可能建议换行),你需要采取措施确保它永远不会发生。