我有两张桌子A& B和我想要一个查询: 如果两个表相同,则返回TRUE(我的意思是A中的每一行都存在于B&反之亦然,无论行顺序如何)
我使用关键字EXCEPT,但在许多情况下它不起作用
感谢您的帮助。
答案 0 :(得分:6)
select * from tablea except all select * from tableb
返回tablea中不存在于tableb中的所有行。
反过来做
select * from tableb except all select * from tablea
返回tableb中不存在于tablea中的所有行。
所以,现在我们可以:
select count(*) from ( select * from tablea except all select * from tableb ) x;
获取tablea中“坏”行的数量,并且:
select count(*) from ( select * from tableb except all select * from tablea ) x;
计算tableb中的“坏”行数。
如果两个计数都为0,表是相同的,并且因为两个计数都不能小于零,那么我们可以测试计数的总和是否为0:
select 0 = ( select count(*) from ( select * from tablea except all select * from tableb ) x ) + ( select count(*) from ( select * from tableb except all select * from tablea ) x );