SQL常用算法-兩張相同格式表查找一致/不一致數(shù)據(jù)
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
實(shí)際項(xiàng)目中,存在這么一種場景,測試環(huán)境測試完成后,搬遷至正式環(huán)境重新取數(shù),但是需要確定正式環(huán)境數(shù)據(jù)與測試環(huán)境完全一致,我們可以比較兩張表中是否存在不一致數(shù)據(jù),如果查詢不出,即表示正式環(huán)境數(shù)據(jù)可用。 假設(shè)我們有兩張表,分別為table1和table2,且它們具有相同的字段結(jié)構(gòu)(例如都有字段A, B, C)。為了找出這兩張表中完全一致的數(shù)據(jù)和完全不一致的數(shù)據(jù),我們可以分別進(jìn)行如下操作: 查找完全一致的數(shù)據(jù): -- 定義一個臨時表,存儲table1的所有數(shù)據(jù)以及對應(yīng)的表名 CREATE TEMPORARY TABLE temp_table1 AS SELECT *, 'table1' as source FROM table1; -- 同理,定義一個臨時表,存儲table2的所有數(shù)據(jù)以及對應(yīng)的表名 CREATE TEMPORARY TABLE temp_table2 AS SELECT *, 'table2' as source FROM table2; -- 找出在兩個表中完全一致的數(shù)據(jù) SELECT * FROM ( SELECT * FROM temp_table1 UNION ALL SELECT * FROM temp_table2 ) AS combined_tables GROUP BY A, B, C HAVING COUNT(*) = 2; 上述SQL首先創(chuàng)建了兩個臨時表并標(biāo)記來源,然后通過UNION ALL合并所有數(shù)據(jù),最后通過GROUP BY和HAVING子句篩選出在兩個表中都出現(xiàn)過的(即完全一致的)記錄。 查找不一致的數(shù)據(jù): 這里假設(shè)為在一張表中存在的記錄,在另一張表中不存在。 -- 查找只存在于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中的記錄,這就是我們所說的“完全不一致”的數(shù)據(jù)。 該文章在 2024/3/30 12:55:50 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |