当前位置:  开发笔记 > 编程语言 > 正文

如何在Postgresql中比较两个表?

如何解决《如何在Postgresql中比较两个表?》经验,为你挑选了1个好方法。

我有两个相同的表:

A :   id1, id2, qty, unit
B:    id1, id2, qty, unit

(id1,id2)标识每个行,并且在每个表中只能出现一次。

140在表A141 rows表中都有行B。我想找到两个表中都没有出现的所有键(id1,id2)。肯定有1个,但不能有更多(例如,如果每个表具有完全不同的数据)。

我写了这个查询:

(TABLE a EXCEPT TABLE b)
UNION ALL
(TABLE b EXCEPT TABLE a) ;

但这不起作用。它比较整个表,我不在乎qty或者unit是不同的,我只在乎id1,id2



1> Jasen..:

使用完整的外部联接:

 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 )

这将显示a中不匹配b的行。

或使用联接的相同结果

select a.* 
  from a left outer join b 
  on a.id1=b.id1 and a.id2=b.id2
  where b.id1 is null

有时联接比“不在”更快

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有