bgu*_*ach 6 sql sqlite many-to-many
我正试图在字符串中加入两对多对话的关联.在这个例子中,每个团队都有不确定数量的颜色和一个未确定的数字赢得奖项.
这是架构:

这是我正在使用的查询:
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
Run Code Online (Sandbox Code Playgroud)
问题在于颜色和奖励是重复的.让我们说A-Team有红色和蓝色作为颜色,作为奖项TrollAward和DarwinAward ......我从SQL得到的结果如下:
name: "A-Team"
colours: "red,blue,red,blue"
awards: "TrollAward,DarwinAward,TrollAward,DarwinAward"
Run Code Online (Sandbox Code Playgroud)
我试图只加入一个多对多,并且完美地工作,所以我想我正在监督多个连接的东西......
快速而肮脏的答案是添加DISTINCT函数GROUP_CONCAT():
SELECT
teams.name AS name,
GROUP_CONCAT(DISTINCT colours.name) AS colours,
GROUP_CONCAT(DISTINCT awards.name) AS awards
...
Run Code Online (Sandbox Code Playgroud)
尽管对于大表来说这可能不是很有效。第二种方法是在两个子查询(派生表)中,从一个子查询和另一个子查询中GROUP BY获取串联,然后连接这些派生表。awardscolurs
| 归档时间: |
|
| 查看次数: |
1126 次 |
| 最近记录: |