我有两张相同的表格:
A : id1, id2, qty, unit
B: id1, id2, qty, unit
(id1,id2)
集合标识每一行,每个表格只能出现一次。
我在表140
中有A
行,在表141 rows
中有B
行。
我想找到两个表中没有出现的所有键(id1,id2)。有1是肯定的,但不能有更多(例如,如果每个表有完整的不同数据)。
我写了这个查询:
(TABLE a EXCEPT TABLE b)
UNION ALL
(TABLE b EXCEPT TABLE a) ;
但它不起作用。它会比较整个表格,我不在乎qty
或unit
是不同的,我只关心id1,id2
。
答案 0 :(得分:3)
使用完整的外部联接:
select a.*,b.*
from a full outer join b
on a.id1=b.id1 and a.id2=b.id2
这两个表并排显示。有空隙的地方有无可匹敌的行。
select a.*,b.*
from a full outer join b
on a.id1=b.id1 and a.id2=b.id2
where a.id1 is null or b.id1 is null;
只显示不匹配的行。
或者您可以不在
中使用select * from a
where (id1,id2) not in
( select id1,id2 from b )
将显示与b不匹配的行。
或使用连接的相同结果
select a.*
from a left outer join b
on a.id1=b.id1 and a.id2=b.id2
where b.id1 is null
有时连接比“不在”
更快