Sql server 2008 SQL Server 2008列仅位于一个表中

Sql server 2008 SQL Server 2008列仅位于一个表中,sql-server-2008,data-mining,sql-scripts,Sql Server 2008,Data Mining,Sql Scripts,首先是一个快速的解释:我实际上在处理四个表并从不同的地方挖掘数据,但我的问题归结为这个看似简单的概念,是的,我对这个非常陌生 我有两个表(一个和两个),其中都有ID列。我只想查询表2中的ID列,而不是同时查询两个表中的ID列。如 Select ID From dbo.one, dbo.two Where dbo.two != dbo.one 我真的以为这会奏效,但我得到了奇怪的结果。有人能帮忙吗 SELECT t2.ID FROM dbo.two t2 WHERE NOT EX

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

我有两个表(一个和两个),其中都有ID列。我只想查询表2中的ID列,而不是同时查询两个表中的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)
这也可以通过
左连接来完成:

SELECT t2.ID
    FROM dbo.two t2
        LEFT JOIN dbo.one t1
            ON t2.ID = t1.ID
    WHERE t1.ID IS NULL

在Joe回答后完成其他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)
注意:左连接将比其他三个慢,这三个都应该给出相同的计划


这是因为左连接是一个连接,后面是一个过滤器,其他3个是半连接

非常有效,非常感谢!现在我要去研究这个不存在的条款。再次感谢@2boolbornot2bool:请看我在dba.se上的答案,我知道你们知道的比我想象的要多,我知道的比我想象的要少,Stack是hugh。有一个基督教网站!哇!这个看起来也很结实。我也会试试这个,这样我就可以玩那个例外条款了。谢谢你的帮助!嗯。。我运行了你的查询,得到了不同的结果。我想我把事情搞砸了,所以我查了一下表,Joes代码只是给了我表2中的所有ID。你的接缝需要整理。我可能在答案检查上做了一次预先检查。或者我很可能做错了什么。@2boolbornot2bool:任何一种都是偶然的,没有人会下命令