Mysql快速比较两个表中的数据是否有差异

1、比较方法:

SELECT *
FROM
 (
   SELECT *
   FROM t1
   UNION ALL
   SELECT *
   FROM t2
)  t
GROUP BY pk, c1
HAVING COUNT(*) = 1
ORDER BY pk

第一个括号中用Union语句合并两个表中的行记录:仅包含需要比较的列。返回结果集用于比较。

Group By后边跟上需要进行比对的字段(两个表都有的) 如上图pk 和c1是表t1和表t2中共有的字段 即可比较表t1和表t2 的pk c1字段数据的差异
没有差异 结果显示为空;若有差异会列出有差异的数据

2、实际案例:比较zhoubao和zhoubaoafter表中的数据是否相同:

比较zhoubao和zhoubaoafter两个表中id字段数据的差异:

SELECT * FROM(
SELECT *  FROM zhoubao UNION ALL SELECT * FROM zhoubaoafter
)  t 
GROUP BY id
HAVING COUNT(*) = 1 ORDER BY id;

比较zhoubao和zhoubaoafter两个表中id、filePath字段数据的差异:

SELECT * FROM(
SELECT *  FROM zhoubao UNION ALL SELECT * FROM zhoubaoafter
)  t 
GROUP BY id,filePath
HAVING COUNT(*) = 1 ORDER BY id;

比较zhoubao和zhoubaoafter两个表中id,useName,filePath,time,week,pingjia字段数据的差异:

SELECT * FROM(
SELECT *  FROM zhoubao UNION ALL SELECT * FROM zhoubaoafter
)  t 
GROUP BY id,userName,filePath,time,week,pingjia  
HAVING COUNT(*) = 1 ORDER BY id;

实验条件:
表zhoubao和表zhoubaoafter在同一个数据库中,有一条数据的filePath字段有所不同 其余全部相同

实验结果:

filepath字段有一项不同,当Group By后边没有filePath字段时,结果显示没有差异

Group By后边有filePath字段时,结果显示存在差异的数据项
数据差异比较结果

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐