首先快速解释一下:我实际上正在处理四个表并从不同地方挖掘数据,但我的问题归结为这个看似简单的概念,是的,我对此很陌生......
我有两个表(一个和两个),其中都有 ID 列。我只想查询表 2 中的 ID 列,而不是两者。如在..
Select ID
From dbo.one, dbo.two
Where dbo.two != dbo.one
我实际上认为这会起作用,但我得到了奇怪的结果。任何人都可以帮忙吗?
首先快速解释一下:我实际上正在处理四个表并从不同地方挖掘数据,但我的问题归结为这个看似简单的概念,是的,我对此很陌生......
我有两个表(一个和两个),其中都有 ID 列。我只想查询表 2 中的 ID 列,而不是两者。如在..
Select ID
From dbo.one, dbo.two
Where dbo.two != dbo.one
我实际上认为这会起作用,但我得到了奇怪的结果。任何人都可以帮忙吗?
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
在乔回答后完成其他 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 个是半连接