MySQL根据某个字段内容比较两张表异同(找出相同或者不同的行记录)

2022-01-05 945点热度 0人点赞 0条评论

需求说明

需要根据某个字段的值,来比较两个表的异同,某个字段的内容,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

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论