文字列 2 つの多対多の関連付けを取得しようとしています。この例では、各チームの色の数は未定で、賞を獲得したチームの数は未定です。
これはスキーマです:
そして、これは私が使用しているクエリです:
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"
私は1つの多対多に参加しようとしましたが、完全に機能するので、複数の結合で何かを監督していると思います...