在没有多个连接的情况下查找两个表中的差异

Posted

技术标签:

【中文标题】在没有多个连接的情况下查找两个表中的差异【英文标题】:Find differences in both tables without multiple joins 【发布时间】:2019-12-16 13:24:17 【问题描述】:

比较两个数据集后,我想提取以下信息:

仅存在于表 A 中的行 仅存在于表 B 中的行 加入后非键值差异

解决此问题的首选方法是什么?有没有办法做到这一点而不必分别进行 LEFT 和 RIGHT 连接?

【问题讨论】:

请提供样本数据和期望的结果。 可能是外连接 【参考方案1】:

听起来你想要FULL OUTER JOIN。这将为您提供两个表中的所有行,并连接匹配键的行。然后您可以查看哪些行仅存在于一个表中,并比较两个表中的行的值。

【讨论】:

【参考方案2】:

我通常会为此使用group by,所以我不确定对多个连接的引用是什么。

select col1, col2, col3, sum(in_a) as a_cnt, sum(in_b) as b_cnt
from ((select col1, col2, col3, 1 as in_a, 0 as in_b
       from a
      ) union all
      (select col1, col2, col3, 0 as in_a, 1 as in_b
       from b
      )
     ) ab;

【讨论】:

以上是关于在没有多个连接的情况下查找两个表中的差异的主要内容,如果未能解决你的问题,请参考以下文章

SQL 连接两个表并检查两个表中的每个值是不是存在

如何在没有任何重复行的情况下连接 cognos 中的两个表?

内连接与外连接

MySQL和PostgreSQL在多表连接算法上的差异

内连接与外连接-及其典型案例

如何在第三个表中没有公共列的情况下连接三个表?