我与中间表有多对多关系:
table puppy table color table color_join (join table)
puppy_name | ID color | ID puppy_ID | color_ID
--------------- ----------- -------------------
a | 1 color1 | 1 1 | 1
b | 2 color2 | 2 1 | 2
color3 | 3 2 | 3
color4 | 4 2 | 4
ID
是主键,而 puppy_ID, color_ID
是外键。
我的查询是这样的:
SELECT p.name, c.color as color
FROM puppy p
JOIN color_join cj ON p.ID = cj.puppy_ID
JOIN color c ON c.ID = cj.color_ID
它返回这个:
puppy_name | color
------------------
a | 1
a | 2
b | 3
b | 4
我希望颜色像这样分组:
puppy_name | color
------------------
a | 1,2
b | 3,4
为此,我尝试了 group_concat(distinct c.color)
但是我只返回 1 行,颜色列包含所有颜色:
puppy_name | color
--------------------
a | 1,2,3,4
如果我在带有 group_concat(distinct c.color)
的查询中放置一个 where p.id = 1
子句,我仍然只得到一行,但是颜色他们的号码是正确的。
puppy_name | color
--------------------
a | 1,2
我怎样才能完成我想要的?
最佳答案
您需要按p.name
分组。
SELECT p.id, p.name, group_concat(distinct c.color) as colors
FROM puppy p
JOIN color_join cj ON p.ID = cj.puppy_ID
JOIN color c ON c.ID = cj.color_ID
GROUP BY p.id, p.name
当您分组时,group_concat
等聚合函数将应用于每个组,而不是整个记录集。
关于mysql - sql group_concat失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31207021/