我有2個表:#tmptable1
和#tmptable2
。這些表具有唯一標識每個記錄的ID。SQL從1個表中返回所有的id,只返回不同於另一個的
我想從表1中返回所有的記錄,但我只是想從表2返回的記錄不在表1
我想在1個查詢這件事。
謝謝!
我有2個表:#tmptable1
和#tmptable2
。這些表具有唯一標識每個記錄的ID。SQL從1個表中返回所有的id,只返回不同於另一個的
我想從表1中返回所有的記錄,但我只是想從表2返回的記錄不在表1
我想在1個查詢這件事。
謝謝!
SELECT * FROM '#tmptable1'
UNION ALL
SELECT * FROM '#tmptable2' WHERE
ID NOT IN (SELECT ID FROM #tmptable1 WHERE ID IS NOT NULL)
+1 - EXISTS子句可能會執行得更快。 – JNK 2010-08-20 17:25:50
如果行不同,但可以包含相同的ID,這種方式是否可行? 1列在結尾處不同。 – user380432 2010-08-23 19:55:58
我不太明白,要在結果得到的是什麼,但UNION
選擇不同的值,所以你不會有重複的值(從#tmptable2已經在#tmptable1存在價值)。
SELECT * FROM #tmptable1
UNION
SELECT * FROM #tmptable2
總而言之,這些記錄是#tmptable2中不在#tmptable1中的記錄。
SELECT * FROM #tmptable2
EXCEPT
SELECT * FROM #tmptable1
減號僅限於Oracle,OP需要的行不僅僅是id。 – 2010-08-20 16:47:52
@Matrin謝謝你的注意。我的錯。修復。 – 2010-08-20 16:55:19
您仍然需要以某種方式包含'#tmptable1'中的所有記錄。 – 2010-08-20 17:00:32
如果所有的兩個表的其他字段和數據是相同的,你可以這樣做:
SELECT * FROM #tmptable1
UNION
SELECT * FROM #tmptable2
UNION 沒有的所有修改刪除重複。
擊敗了我16秒 – 2010-08-20 16:48:37
但是,如果兩個表中都有相同的ID,並且其他列的值不同,那麼仍然會返回2行。 (除非當然*有*沒有額外的列) – 2010-08-20 16:52:04
@馬丁史密斯:真的 - 這就是爲什麼我的帖子的第一行「如果」是重要的。 – 2010-08-20 16:56:39
SELECT ID FROM #tmptable1
UNION
SELECT ID FROM #tmptable2
UNION
運營商將自動刪除重複項。
你可以給我們的結構......可以幫助這裏... – 2010-08-20 16:42:09
#tmptable1包含a.id #tmptable2包含b.id 有一些A和B之間的相同ID的和我要回所有的a.id,但只有b.id與a.id的不一樣 – user380432 2010-08-20 16:45:20
只是要清楚的是,還有其他列以及'id'嗎? – 2010-08-20 16:49:24