mysql连接产品类别多关系查询

标签 mysql join

我有如下三个表,每个产品可能属于多个类别。

产品表作为 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/

相关文章:

mysql - sql 查询查找可用日期

python - 合并具有特定条件的数据帧

mysql - SQL Select - 某些行不会显示

字段中的mysql数组与其他表连接

php - Wordpress - 使用元数据获取邮政编码并输出谷歌地图

mysql - 加入 vs 数据的多个副本 : Performance

php - 如何解决 AdonisJs、XAMPP MySQL 错误

python - Django 中数据库的下载链接

mysql - 是否可以将纬度/经度 mysql 多边形的边界扩展 x 英里或公里?

javascript - 计算存储在mysql中的剩余字符