管理杂谈OA答疑ERP答疑教程搜索

SQL常用算法-两张相同格式表查找一致/不一致数据


实际项目中,存在这么一种场景,测试环境测试完成后,搬迁至正式环境重新取数,但是需要确定正式环境数据与测试环境完全一致,我们可以比较两张表中是否存在不一致数据,如果查询不出,即表示正式环境数据可用。


假设我们有两张表,分别为table1和table2,且它们具有相同的字段结构(例如都有字段A, B, C)。为了找出这两张表中完全一致的数据和完全不一致的数据,我们可以分别进行如下操作:


查找完全一致的数据:

-- 定义一个临时表,存储table1的所有数据以及对应的表名

CREATE TEMPORARY TABLE temp_table1 AS

SELECT *, 'table1' as source FROM table1;


-- 同理,定义一个临时表,存储table2的所有数据以及对应的表名

CREATE TEMPORARY TABLE temp_table2 AS

SELECT *, 'table2' as source FROM table2;


-- 找出在两个表中完全一致的数据

SELECT *

FROM (

    SELECT * FROM temp_table1

    UNION ALL

    SELECT * FROM temp_table2

) AS combined_tables

GROUP BY A, B, C

HAVING COUNT(*) = 2;

上述SQL首先创建了两个临时表并标记来源,然后通过UNION ALL合并所有数据,最后通过GROUP BY和HAVING子句筛选出在两个表中都出现过的(即完全一致的)记录。


查找不一致的数据:

这里假设为在一张表中存在的记录,在另一张表中不存在。

-- 查找只存在于table1但不在table2中的记录

SELECT * FROM table1

WHERE NOT EXISTS (SELECT 1 FROM table2 WHERE table2.A = table1.A AND table2.B = table1.B AND table2.C = table1.C);


-- 查找只存在于table2但不在table1中的记录

SELECT * FROM table2

WHERE NOT EXISTS (SELECT 1 FROM table1 WHERE table1.A = table2.A AND table1.B = table2.B AND table1.C = table2.C);

以上SQL分别查询了在table1中但不在table2中的记录,以及在table2中但不在table1中的记录,这就是我们所说的“完全不一致”的数据。


更多精彩文章浏览...
点击右上角图标分享到朋友圈
官方网站:http://www.clicksun.cn
咨询热线:400-186-1886
服务邮箱:service@clicksun.cn