This question already has an answer here:
MySQL Group_Concat Repeating Values
(1个答案)
7年前关闭。
我正在尝试将两个多对多关联添加到一个字符串中。在此示例中,每个团队的颜色数量不确定,赢得奖项的数量不确定。
这是模式:
这是我正在使用的查询:
问题是颜色和奖项重复了。假设A-Team的颜色是红色和蓝色,并且获得了TrollAward和DarwinAward的奖励……我从SQL中获得的结果如下所示:
我尝试只加入一个多对多的连接,并且运行良好,所以我想我正在通过多个连接来监督某些事情。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
尽管使用大表,这可能不是很有效。第二种方法是在两个子查询(派生表)中对
(1个答案)
7年前关闭。
我正在尝试将两个多对多关联添加到一个字符串中。在此示例中,每个团队的颜色数量不确定,赢得奖项的数量不确定。
这是模式:
这是我正在使用的查询:
SELECT
teams.name AS name,
GROUP_CONCAT(colours.name) AS colours,
GROUP_CONCAT(awards.name) AS awards
FROM
teams
-- join colours
INNER JOIN teams_to_colours
ON teams.id = teams_to_colours.team_id
INNER JOIN colours
ON teams_to_colours.colour_id = colours.id
-- join awards
INNER JOIN teams_to_awards
ON teams.id = teams_to_awards.team_id
INNER JOIN awards
ON teams_to_awards.award_id = awards.id
WHERE
teams.name="A-Team"
GROUP BY
teams.id
问题是颜色和奖项重复了。假设A-Team的颜色是红色和蓝色,并且获得了TrollAward和DarwinAward的奖励……我从SQL中获得的结果如下所示:
name: "A-Team"
colours: "red,blue,red,blue"
awards: "TrollAward,DarwinAward,TrollAward,DarwinAward"
我尝试只加入一个多对多的连接,并且运行良好,所以我想我正在通过多个连接来监督某些事情。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
最佳答案
快速而肮脏的答案是在DISTINCT
函数中添加GROUP_CONCAT()
:
SELECT
teams.name AS name,
GROUP_CONCAT(DISTINCT colours.name) AS colours,
GROUP_CONCAT(DISTINCT awards.name) AS awards
...
尽管使用大表,这可能不是很有效。第二种方法是在两个子查询(派生表)中对
GROUP BY
进行处理,在其中,您可以从一个子查询中的awards
和另一个子查询中的colurs
获得串联,然后将这些派生表联接在一起。关于sql - 使用两个多对多时,GROUP_CONCAT中的值重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17208221/
10-09 02:23