2010-08-20 33 views
1

我有2個表:#tmptable1#tmptable2。這些表具有唯一標識每個記錄的ID。SQL從1個表中返回所有的id,只返回不同於另一個的

我想從表1中返回所有的記錄,但我只是想從表2返回的記錄不在表1

我想在1個查詢這件事。

謝謝!

+1

你可以給我們的結構......可以幫助這裏... – 2010-08-20 16:42:09

+0

#tmptable1包含a.id #tmptable2包含b.id 有一些A和B之間的相同ID的和我要回所有的a.id,但只有b.id與a.id的不一樣 – user380432 2010-08-20 16:45:20

+0

只是要清楚的是,還有其他列以及'id'嗎? – 2010-08-20 16:49:24

回答

3
SELECT * FROM '#tmptable1' 
UNION ALL 
SELECT * FROM '#tmptable2' WHERE 
    ID NOT IN (SELECT ID FROM #tmptable1 WHERE ID IS NOT NULL) 
+0

+1 - EXISTS子句可能會執行得更快。 – JNK 2010-08-20 17:25:50

+0

如果行不同,但可以包含相同的ID,這種方式是否可行? 1列在結尾處不同。 – user380432 2010-08-23 19:55:58

1

我不太明白,要在結果得到的是什麼,但UNION選擇不同的值,所以你不會有重複的值(從#tmptable2已經在#tmptable1存在價值)。

SELECT * FROM #tmptable1 
UNION 
SELECT * FROM #tmptable2 

總而言之,這些記錄是#tmptable2中不在#tmptable1中的記錄。

SELECT * FROM #tmptable2 
EXCEPT 
SELECT * FROM #tmptable1 
+0

減號僅限於Oracle,OP需要的行不僅僅是id。 – 2010-08-20 16:47:52

+0

@Matrin謝謝你的注意。我的錯。修復。 – 2010-08-20 16:55:19

+0

您仍然需要以某種方式包含'#tmptable1'中的所有記錄。 – 2010-08-20 17:00:32

3

如果所有的兩個表的其他字段和數據是相同的,你可以這樣做:

SELECT * FROM #tmptable1 
UNION 
SELECT * FROM #tmptable2 

UNION 沒有的所有修改刪除重複。

+0

擊敗了我16秒 – 2010-08-20 16:48:37

+0

但是,如果兩個表中都有相同的ID,並且其他列的值不同,那麼仍然會返回2行。 (除非當然*有*沒有額外的列) – 2010-08-20 16:52:04

+0

@馬丁史密斯:真的 - 這就是爲什麼我的帖子的第一行「如果」是重要的。 – 2010-08-20 16:56:39

0
SELECT ID FROM #tmptable1 
UNION 
SELECT ID FROM #tmptable2 

UNION運營商將自動刪除重複項。

相關問題