1

これについて調べてみましたが、何を検索すればよいかわかりませんでした。playersテーブルとチーム テーブルとリンカー テーブルがあります。プレーヤーは複数のチームに所属できます。

チーム XYZ に所属していないすべてのプレイヤーを選択する必要があります。

私はもう試した:

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

しかし、プレーヤーが複数回返され、誤検知が発生します (プレーヤーがチーム XYZ、ABC、および LMNOP に所属している場合、プレーヤーは 2 回返されます)。

GROUP BY players.playerID重複を処理するを使用してみました。しかし、その後、誤検知が発生し、XYZ にいるプレイヤーがリストに表示されます。

私が見逃しているものがあると確信しています。

(追記: これが必要な理由は、チームに追加できるプレーヤー、つまり、まだチームに参加していないプレーヤーのリストを作成するためです。)

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 に答える