2016-12-03 27 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