首先是一個快速解釋:我實際上處理四個表並從不同地方挖掘數據,但是我的問題歸結爲這個看似簡單的概念,是的,我對此很新穎......只有一個表中的SQL Server 2008專欄
我有兩個表(一個和兩個),其中都有ID列。我只想查詢表2中的ID列,而不是兩者。在...
Select ID
From dbo.one, dbo.two
Where dbo.two != dbo.one
我其實認爲這會工作,但我得到奇怪的結果。誰能幫忙?
首先是一個快速解釋:我實際上處理四個表並從不同地方挖掘數據,但是我的問題歸結爲這個看似簡單的概念,是的,我對此很新穎......只有一個表中的SQL Server 2008專欄
我有兩個表(一個和兩個),其中都有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會比慢其他三個,都應該有相同的計劃。
這是因爲左連接是一個連接後跟一個過濾器,其他3個半連接
這看起來也很穩固。我也會試試這個,所以我可以玩這個EXCEPT子句。謝謝您的幫助! – 2boolORNOT2bool
嗯..我跑你的查詢,並得到不同的結果。我想我搞砸了一些東西,所以我用phisicaly檢查了桌子,Joes代碼只是給了我表格2中的所有ID。你的接縫正在整理。我可能會對答案檢查進行一次預先安排的罷工。或者我很可能做錯了什麼。 – 2boolORNOT2bool
@ 2boolORNOT2bool:任何排序都是偶然的,沒有ORDER BY – gbn
工作非常感謝一堆!現在我要學習這個NOT EXISTS子句。再次感謝! – 2boolORNOT2bool
@ 2boolORNOT2bool:請參閱我在dba.se上的回答請http://dba.stackexchange.com/questions/4009/the-use-of-not-logic-in-relation-to-indexes/4010#4010 – gbn
I'我知道你們比我預想的要多得多,我知道比我想象的要少得多,而且Stack很休閒。 Theres基督教站點!哇! – 2boolORNOT2bool