前端之家收集整理的这篇文章主要介绍了
检查两个表在PostgreSQL中是否具有相同的内容,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一种选择是使用以下形式在两个表之间使用FULL OUTER JOIN:
SELECT count (1)
FROM table_a a
FULL OUTER JOIN table_b b
USING (<list of columns to compare>)
WHERE a.id IS NULL
OR b.id IS NULL ;
例如:
CREATE TABLE a (id int,val text);
INSERT INTO a VALUES (1,'foo'),(2,'bar');
CREATE TABLE b (id int,val text);
INSERT INTO b VALUES (1,(3,'bar');
SELECT count (1)
FROM a
FULL OUTER JOIN b
USING (id,val)
WHERE a.id IS NULL
OR b.id IS NULL ;
将返回2的计数,而:
CREATE TABLE a (id int,val)
WHERE a.id IS NULL
OR b.id IS NULL ;
返回希望的计数为0.
我喜欢这种方法的方法是它只需要读取每个表一次,而不是在使用EXISTS时读取每个表两次.此外,这适用于任何支持完全外连接的数据库(不仅仅是Postgresql).
我一般不鼓励使用USING条款,但我认为这是一种更好的方法.