mysql - sql group_concat失败

标签 mysql sql

我与中间表有多对多关系:

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/

相关文章:

mysql - 将 MS-SQL 服务器文本类型插入 MySQL 服务器

mysql - SQL更新表,WHERE子句多字段

php - 让用户更改自己的密码?

sql - 在 SQL Reporting Services 中对齐文本

mysql - 总锁数超过锁表大小

php - 使用 PDO fetch 查询 Mysql 返回 false

php - Foreach 循环似乎有语法错误?

python - 在 Django 中获取查询对象的外键值

php - mysql查询依赖于其他表

sql - 分区切换问题