2012-05-08 60 views
1

我試圖研究這個,但不知道該怎麼尋找玩家選擇。我有一個players表和一個團隊表和一個鏈接器表。一個球員可以在多個球隊。許多一對多的關係:是不是在一個特定的團隊

我需要選擇不上隊XYZ所有玩家。

我已經試過:

SELECT * FROM players LEFT JOIN linker ON players.playerID = linker.playerID 
WHERE NOT linker.teamID = 'XYZ' 

但隨後會返回一個球員多次和我得到誤報(說球員在隊XYZ,ABC和LMNOP - 玩家返回兩次)。

我使用GROUP BY players.playerID這需要重複的照顧嘗試。但後來我得到了誤報,XYZ上的球員出現在名單中。

我敢肯定有我丟失的東西。

(PS我之所以需要這個是要建立的玩家可以加入到一個團隊,即已經不在球隊的球員名單。)

回答

4

使用NOT IN

SELECT * 
FROM players 
WHERE playerID NOT IN 
     (SELECT playerID 
     FROM linker 
     WHERE teamID = 'XYZ' 
    ) 

使用LEFT JOIN - IS NULL,您嘗試更正:

SELECT players.* 
FROM players 
    LEFT JOIN linker 
    ON linker.playerID = players.playerID 
    AND linker.teamID = 'XYZ' 
WHERE linker.playerID IS NULL 

使用NOT EXISTS

SELECT * 
FROM players 
WHERE NOT EXISTS 
     (SELECT * 
     FROM linker 
     WHERE linker.playerID = players.playerID 
      AND linker.teamID = 'XYZ' 
    ) 
+0

+1經典,解決了優雅。 :) –

+0

這工程!感謝您提供不同的解決方案 - 這有助於我更好地理解如何與這種關係的互動。 –