2016-12-03 26 views
-4

我有2個表,我希望獲取的行不相等。如何編寫查詢?如何在SQL查詢中獲得不相等的行

例如,table a包含10行,table b包含10行。在A和B 平等行是5

我想借此不等於行(未在B表)

如何獲取一個表值不等於B表?

結果應該是5條

+0

減號未給出正確答案。它給兩個表不等價值。我只想要一個表值 – user2587029

回答

2

採取排在A,但不是在B:

select * from A minus select * from B 

若要在無論是在一個行和B而不是:

(select * from A union select * from B) minus (select * from A intersect select * from B) 
+0

減去不給出正確的答案。它給兩個表不等價值。我只想要一個表值 – user2587029

1

這個問題早就已經解決了。最佳解決方案只讀取一次表格(不同於每次讀取表格兩次並執行一些額外工作的「對稱差異」解決方案)。

select 'A' as source, col1, col2, ... 
from table_A 
union all 
select 'B' as source, col1, col2, ... 
from table_B 
group by col1, col2, ... 
having count(*) = 1 
; 

如果行是本兩個表中,則該計數是2

這假定有在兩個表中沒有重複的行;如果可能存在重複行,則可以修改HAVING條件,例如:

having count(case when source = 'A' then 1 end) = 0 
    or count(case when source = 'B' then 1 end) = 0