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.playerIDwhich 来处理重复项。但后来我得到了误报,XYZ 上的玩家出现在列表中。

我确定我缺少一些东西。

(PS我需要这个的原因是建立一个可以加入球队的球员列表,即尚未加入球队的球员。)

4

1 回答 1

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'
      )
于 2012-05-08T22:09:26.710 回答