web-dev-qa-db-ja.com

joinを使用して「not in()」SQLクエリを記述する方法

誰かが結合を使用して次のSQLクエリを記述する方法を提供してください。私はnot inを使用したくないし、可能であればwhere条件も置き換えたいと思う。

SELECT d1.Short_Code
FROM domain1 d1
WHERE d1.Short_Code NOT IN (
  SELECT d2.Short_Code
  FROM Domain2 d2
)

SQL Server 2008を使用しています

42
Elangesh

この記事:

あなたに興味があればかもしれません。

いくつかの言葉で、このクエリは:

SELECT  d1.short_code
FROM    domain1 d1
LEFT JOIN
        domain2 d2
ON      d2.short_code = d1.short_code
WHERE   d2.short_code IS NULL

動作しますが、NOT NULL(またはNOT EXISTS)構造よりも効率的ではありません。

これも使用できます:

SELECT  short_code
FROM    domain1
EXCEPT
SELECT  short_code
FROM    domain2

これはNOT INWHEREも使用しません(結合さえしません!)が、もしあればdomain1.short_codeのすべての重複を削除します。

61
Quassnoi
SELECT d1.Short_Code 
FROM domain1 d1
LEFT JOIN domain2 d2
ON d1.Short_Code = d2.Short_Code
WHERE d2.Short_Code IS NULL
14
Aducci

私はNOT EXISTS この場合。

SELECT D1.ShortCode
FROM Domain1 D1
WHERE NOT EXISTS
    (SELECT 'X'
     FROM Domain2 D2
     WHERE D2.ShortCode = D1.ShortCode
    )
4
Rob Paller