2017-08-29 122 views
0

我有四個表是這樣的:SQL - 無法弄清楚如何加入三個表

 **USERS** 
___________________________ 
user_ID username password 
--------------------------- 
1  user1  1234 
2  user2  5678 


       **TEAMS** 
______________________________________ 
team_ID formation team_name user_ID 
-------------------------------------- 
1  4-4-2  team1  1 
2  4-3-3  team2  2 

      **PLAYERS** 
____________________________________  
player_ID name  position rating 
------------------------------------ 
1   Ronaldo LW  94 
2   Messi RW  93 
3   Hazard LW  90 

     **ACTIVE PLAYERS** 
___________________________________ 
ID player_ID team_ID cardview_ID 
----------------------------------- 
1 1   2  9 
2 3   1  7 
3 2   1  3 

每個用戶都有一個團隊,一個形成和隊名。 「活躍球員」表格引用player_IDteam_ID來查看哪些球員目前活躍於哪支球隊。

假設user1登錄到應用程序,然後我想所有的球員namerating及其cardview_ID。東西應該看上去像這樣的:

_____________________________ 
name rating cardview_ID 
----------------------------- 
Hazard 90  7 
Messi 94  3 

這些是目前user1's隊是team1活躍的球員。

如何獲得此連接表?我曾嘗試過inner join,但這似乎並不適合我。

_______________________________ EDIT_____________________________________

這是不給所期望的結果查詢:

SELECT players.name, players.rating, activeplayers.cardview_ID 
FROM players 
INNER JOIN 
activeplayers 
ON players.player_ID = usedplayers.player_ID 

我也想加入他們TEAM_ID。

+0

您嘗試「加入」的連接方式不正確?加入是正確的解決方案。 –

+0

查詢在哪裏? – Eric

+0

@TabAlleman你能幫我寫出正確的連接嗎?當我嘗試在team_ID或player_ID上加入他們時,我得到的行數比我想要的要多得多。 – Sumsar9000

回答

2

假設在您的文章中查詢包含一個錯字,實際上是這樣的:

SELECT players.name, players.rating, activeplayers.cardview_ID 
FROM players 
INNER JOIN 
activeplayers 
ON players.player_ID = activeplayers.player_ID 

此查詢將返回正確的所有誰是現役球員中的球員。現在要將其僅限制在User1的團隊中,您需要按照與上述連接相同的方式向Teams表中添加其他連接,然後添加一個WHERE子句以過濾Teams.UserID

就是這樣。

+0

這很好;我的答案提供了一個模型,你將如何實現第三次連接,爲user_id添加WHERE子句 – quetzaluz

+0

是的,我注意到了!它完美的作品 – Sumsar9000

3

假設你已經登錄的用戶的ID可用的,我想這會給你你要問什麼:

SELECT 
    [PLAYERS].name, 
    [PLAYERS].rating, 
    [ACTIVE PLAYERS].cardview_ID 
FROM [TEAMS] 
JOIN [ACTIVE PLAYERS] 
ON [TEAMS].team_ID = [ACTIVE PLAYERS].team_id 
JOIN [PLAYERS] 
ON [PLAYERS].player_id = [ACTIVE PLAYERS].player_id 
WHERE [TEAMS].user_id = <logged_in_user_id> 

還請注意要求澄清的細節問題,也隨時響應如果這個查詢讓你成爲你的一部分,但你需要更多的信息。尖括號中的內容當然是佔位符。我也不知道你的確切表名,所以你可能需要用實際的表名替換方括號中的內容。

+1

謝謝!這工作:) – Sumsar9000

+0

我不知道爲什麼有人低估了你的問題,因爲這個問題絕對有效!快樂編碼:) – quetzaluz

+0

也許是因爲我沒有在開始時發佈我的查詢。愚蠢的錯誤。謝謝你的幫助:) – Sumsar9000