两个表之间的差异

时间:2015-03-12 21:00:43

标签: sql

数据是这样的,(table1链接到table2)table1.col2 = table2.col2

根据该标准,

下面的员工5在第一个表中分配给区域1,但是在第二个表中,员工未分配到区域1,因此返回的结果将只是第一个表的第一个记录(emp5,a1)

以下示例

表1

Col1    Col2
-------------
emp5     A1
emp6     A1
emp5     A2

表2

Col1      Col2
--------------
emp7       A1 
emp6       A1
emp5       A2 

3 个答案:

答案 0 :(得分:1)

你可以使用MINUS,它更直观。 SQL Server,MySQL或Oracle中的语法可能不同,就像您可以看到http://blog.sqlauthority.com/2008/08/07/sql-server-except-clause-in-sql-server-is-similar-to-minus-clause-in-oracle/

一样

但我喜欢MINUS,例如

select 
   t1.Col1,
   t1.Col2
from table1 t1
MINUS
select 
   t2.Col1,
   t2.Col2
from table2 t2

通过这种方式,您可以像集合(数学)一样思考!

答案 1 :(得分:0)

select table1.* 
  from table1 
  left join table2 
    on table1.col1 = table2.col1 
   and table1.col2 = table2.col2 
 where table2.col1 is null 

如果您只想要表1中那些也分配给另一个项目的那些

select distinct table1.* 
  from table1 
  join table2 as t2not 
    on t2not.col1 =  table1.col1 
   and t2not.col2 <> table1.col2 
  left join table2 
    on table1.col1 = table2.col1 
   and table1.col2 = table2.col2 
 where table2.col1 is null 

答案 2 :(得分:0)

这很棘手。您需要两个表中的员工。然后你需要检查其中一行的col2是否不同。

以下使用union all进行比较:

select col1, col2, max(which)
from ((select col1, col2, 1 as which
       from table1 t1 
       where exists (select 1 from table2 t2 where t2.col1 = t1.col1)
      ) union all
      (select col1, col2, 2 as which
       from table2 t2
       where exists (select 1 from table1 t1 where t2.col1 = t1.col1)
      )
     ) tt
group by col1, col2
having count(*) = 1

这也会告诉你哪个表有额外的行。