[英]Select * from 'many to many' SQL relationship
我還在學習SQL,我的大腦很難用這個。
說我有3張桌子:
teams
players
和teams_players
作為我的鏈接表
我想要做的就是運行一個查詢來讓每個團隊和玩家參與其中。
我試過這個:
SELECT *
FROM teams
INNER JOIN teams_players
ON teams.id = teams_players.team_id
INNER JOIN players
ON teams_players.player_id = players.id
但它為每支球隊的每名球員返回了一個單獨的一行。 加入是正確的方法嗎?還是我應該做其他事情?
-----------------------------------------編輯
好的,所以從我聽到的情況來看,這並不一定是一種糟糕的方式。 在進行循環時,我只需要按團隊對數據進行分組。
我還沒有嘗試過提供的修改過的SQL語句,但今天我會回復你。
要回答關於結構的問題 - 我想我並沒有考慮返回的行結構,這是導致我混淆的一部分。 在這種特殊情況下,每個團隊僅限4名玩家(或更少),所以我想對我有用的結構如下:
teams.id, teams.name, players.id, players.name, players.id, players.name, players.id, players.name, players.id, players.name,
1 Team ABC 1 Jim 2 Bob 3 Ned 4 Roy
2 Team XYZ 2 Bob 3 Ned 5 Ralph 6 Tom
好的,這是一個猜測,但你想要一個團隊和團隊中的球員列表在一排
怎么樣
SELECT t.id, GROUP_CONCAT(p.id)
FROM teams t
INNER JOIN teams_players tp
ON t.id = tp.team_id
INNER JOIN players p
ON tp.player_id = p.id
GROUP BY t.id
手冊可以幫助http://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_group-concat
MySQL將以表格格式返回數據,因此請考慮如何在一個表/結果集中返回一個玩家和團隊列表,包括每個玩家與哪個團隊相關聯,而不為團隊中的每個玩家返回單獨的行?
您的查詢應返回:
team.id, team.name, player.id, player.name
1 team1 1 player1
1 team1 2 player2
2 team2 3 player3
2 team2 4 player4
如果你想要的東西
team.id, team.name
1 team1
2 team2
player.id, player.name, team.id
1 player1 1
2 player2 1
3 player3 2
4 player4 2
其中有兩個單獨的結果集,那么您將不得不進行兩次查詢。 如果您想為每個團隊設置不同的結果集,則必須為每個團隊進行額外的查詢。
話雖這么說,我沒有看到你的初始查詢有太多錯誤,只是它給你很多重復的數據,以換取不必進行多個查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.