2

首先快速解释一下:我实际上正在处理四个表并从不同地方挖掘数据,但我的问题归结为这个看似简单的概念,是的,我对此很陌生......

我有两个表(一个和两个),其中都有 ID 列。我只想查询表 2 中的 ID 列,而不是两者。如在..

Select ID
From dbo.one, dbo.two
Where dbo.two != dbo.one

我实际上认为这会起作用,但我得到了奇怪的结果。任何人都可以帮忙吗?

4

2 回答 2

2
SELECT t2.ID
    FROM dbo.two t2
    WHERE NOT EXISTS(SELECT NULL
                         FROM dbo.one t1
                         WHERE t2.ID = t1.ID)

这也可以通过以下方式完成LEFT JOIN

SELECT t2.ID
    FROM dbo.two t2
        LEFT JOIN dbo.one t1
            ON t2.ID = t1.ID
    WHERE t1.ID IS NULL
于 2011-08-08T16:33:49.570 回答
2

在乔回答后完成其他 2 个选项...

SELECT id
FROM dbo.two
EXCEPT
SELECT id
FROM dbo.one

SELECT t2.ID
FROM dbo.two t2
WHERE t2.ID NOT IN (SELECT t1.ID FROM dbo.one t1)

注意:LEFT JOIN 会比其他三个慢,它们应该都给出相同的计划。

那是因为 LEFT JOIN 是一个连接后跟一个过滤器,其他 3 个是半连接

于 2011-08-08T16:39:58.333 回答