59

有人可以提供如何使用联接编写以下 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

4

3 回答 3

83

本文:

如果你感兴趣的话。

简而言之,这个查询:

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(or NOT EXISTS) 构造效率低。

你也可以使用这个:

SELECT  short_code
FROM    domain1
EXCEPT
SELECT  short_code
FROM    domain2

这既不使用NOT IN也不使用WHERE(甚至不使用连接!),但这将删除所有重复项(domain1.short_code如果有)。

于 2011-04-15T12:20:39.100 回答
17
SELECT d1.Short_Code 
FROM domain1 d1
LEFT JOIN domain2 d2
ON d1.Short_Code = d2.Short_Code
WHERE d2.Short_Code IS NULL
于 2011-04-15T12:15:48.627 回答
5

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

SELECT D1.ShortCode
FROM Domain1 D1
WHERE NOT EXISTS
    (SELECT 'X'
     FROM Domain2 D2
     WHERE D2.ShortCode = D1.ShortCode
    )
于 2011-04-15T12:32:48.647 回答