簡體   English   中英

從“多對多”SQL關系中選擇*

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM