我试过研究这个,但不确定要搜索什么。我有一个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上的玩家出现在列表中。
我确信有些东西我不见了。
(P.S。我需要这个的原因是建立一个可以添加到球队的球员名单,即那些尚未加入球队的球员。)
答案 0 :(得分: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'
)