如何使用join编写“not in()”sql查询

时间:2011-04-15 12:14:17

标签: sql sql-server tsql notin

有人可以提供如何使用连接编写以下sql查询。我不想使用不在中,如果可能的话,我也想替换 where 条件。

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

我正在使用SQL Server 2008

3 个答案:

答案 0 :(得分:57)

这篇文章:

如果您感兴趣,可能会感兴趣。

有几个词,这个查询:

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 IN也不使用WHERE(甚至没有加入!),但这会删除domain1.short_code上的所有重复项(如果有的话)。

答案 1 :(得分:14)

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

答案 2 :(得分:4)

在这种情况下,我会选择NOT EXISTS

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