需求说明
需要根据某个字段的值,来比较两个表的异同,某个字段的内容,1)两个表里都有;2)只有A表有,B表没有;3)只有B表有,A表没有。
实现
主要思路是把两张表UNION起来,然后根据需要比较的字段来分组,根据count(分组字段)的数量来比较,如果count=2,说明两张表都有,如果count=1说明只有某一张表才有。
具体的SQL如下:
-- 比较两张表不同的内容 compare_key就是要比较的字段,假设两个表都有,没有的话,或者两个表的要比的字段不一样,那么只要union的时候用别名就可以了(或者建立虚拟字段) SELECT compare_key, group_concat(table_name separator ',') as table_names from ( SELECT 'table_1' as table_name, t1.compare_key from table_1 t1 union ALL SELECT 'table_2' as table_name, t2.compare_key from table_2 t2 ) t group by compare_key having count(compare_key)=1 -- 如果要比较两张表相同的行,那么只要修改下having count(compare_key)=2 就可以了 SELECT compare_key, group_concat(table_name separator ',') as table_names from ( SELECT 'table_1' as table_name, t1.compare_key from table_1 t1 union ALL SELECT 'table_2' as table_name, t2.compare_key from table_2 t2 ) t group by compare_key having count(compare_key)=2
文章评论