数据是这样的,(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
答案 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
这也会告诉你哪个表有额外的行。