2011-08-08 47 views
2

首先是一個快速解釋:我實際上處理四個表並從不同地方挖掘數據,但是我的問題歸結爲這個看似簡單的概念,是的,我對此很新穎......只有一個表中的SQL Server 2008專欄

我有兩個表(一個和兩個),其中都有ID列。我只想查詢表2中的ID列,而不是兩者。在...

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

我其實認爲這會工作,但我得到奇怪的結果。誰能幫忙?

回答

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 
+0

工作非常感謝一堆!現在我要學習這個NOT EXISTS子句。再次感謝! – 2boolORNOT2bool

+0

@ 2boolORNOT2bool:請參閱我在dba.se上的回答請http://dba.stackexchange.com/questions/4009/the-use-of-not-logic-in-relation-to-indexes/4010#4010 – gbn

+0

I'我知道你們比我預想的要多得多,我知道比我想象的要少得多,而且Stack很休閒。 Theres基督教站點!哇! – 2boolORNOT2bool

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會比慢其他三個,都應該有相同的計劃。

這是因爲左連接是一個連接後跟一個過濾器,其他3個半連接

+0

這看起來也很穩固。我也會試試這個,所以我可以玩這個EXCEPT子句。謝謝您的幫助! – 2boolORNOT2bool

+0

嗯..我跑你的查詢,並得到不同的結果。我想我搞砸了一些東西,所以我用phisicaly檢查了桌子,Joes代碼只是給了我表格2中的所有ID。你的接縫正在整理。我可能會對答案檢查進行一次預先安排的罷工。或者我很可能做錯了什麼。 – 2boolORNOT2bool

+0

@ 2boolORNOT2bool:任何排序都是偶然的,沒有ORDER BY – gbn