简体   繁体   中英

Find differences in both tables without multiple joins

After comparing two data sets I'd like to extract information such as:

  • Rows that are only present in table A
  • Rows that are only present in table B
  • Non-key value differences after join

What's the preferred way to go about this? Is there a way to do this without having to do LEFT and RIGHT joins separately?

I would typically use group by for this, so I'm not sure what the reference to multiple joins is.

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;

It sounds you want a FULL OUTER JOIN . That gives you all rows from both tables, joining ones that match keys. Then you can see which rows are present in only one table, and compare values for rows that are in both.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM