我有如下三个表,每个产品可能属于多个类别。
产品表作为 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
最佳答案
执行两个 JOIN 操作(到关系表,然后从那里到包含类别名称的表)并将结果提供给聚合函数 (GROUP_CONCAT)
SELECT P.Name, GROUP_CONCAT(DISTINCT C.Name ORDER BY C.Name SEPARATOR '|') categories
FROM Product P
LEFT JOIN Relation R ON P.ID = R.P_ID
LEFT JOIN Category C ON R.C_ID = C.ID
GROUP BY P.ID, P.Name
这将为每个产品提供一行,类别由 |
分隔。
这使用 LEFT JOIN 操作,因此不会抑制没有类别的产品。
关于mysql连接产品类别多关系查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47518275/