PostgreSQL查询两个表之间的相等性

时间:2009-12-29 10:11:32

标签: sql postgresql

我有两张桌子A& B和我想要一个查询: 如果两个表相同,则返回TRUE(我的意思是A中的每一行都存在于B&反之亦然,无论行顺序如何)

我使用关键字EXCEPT,但在许多情况下它不起作用

感谢您的帮助。

1 个答案:

答案 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 );