MySQL比較兩個表不同的數據


在數據遷移中,我們經常需要比較兩個表,以便在一個表中標識另一個表中沒有相應記錄的記錄。

例如,我們有一個新的數據庫,其架構與舊數據庫不同。我們的任務是將所有數據從舊數據庫遷移到新數據庫,並驗證數據是否正確遷移。

要檢查數據,我們必須比較兩個表,一個在新數據庫中,一個在舊數據庫中,並標識不匹配的記錄。

 

Union:對兩個結果集進行並集操作,不包括重復行,同時進行默認規則的排序;

Union All:對兩個結果集進行並集操作,包括重復行,不進行排序;

 

假設有兩個表:t1t2。使用以下步驟比較兩個表,並確定不匹配的記錄:

1、首先,使用UNION語句來組合兩個表中的行; 僅包含需要比較的列。返回的結果集用於比較。

-- 語法:MySQL比較兩個表不同的數據
SELECT * FROM t1
UNION ALL
SELECT * FROM t2;
-- 創建兩個表
CREATE TABLE t1(
id INT auto_increment PRIMARY KEY,
title VARCHAR(255)
);

CREATE TABLE t2(
id INT auto_increment PRIMARY KEY,
title VARCHAR(255),
note VARCHAR(255)
);

-- 給表1、2中插入數據
INSERT INTO  t1(title) VALUES
('語文'),('數學'),('量子力學'),('美術'),('計算機');

INSERT INTO t2(id,title)
SELECT * FROM t1;

2、然后在用下面方法查詢對比,返回的結果是空的。因為這兩個表:id、title數據是一樣的,且兩個表中其他列的數據為空。

SELECT id,title FROM (
SELECT * FROM t1
UNION ALL
SELECT id,title from t2) c 
GROUP BY c.id
HAVING COUNT(*)=1 
ORDER BY c.id ;

3、所以在插入一行數據給表2

INSERT INTO t2(title,note) VALUES('new','noe');

在用2的語句查詢對比,有一條返回結果:

 

 可能有人會想,如果只有兩列數據就是id和title,如果title中有數據不同,會有不同的結果呢?那這里在插入一條數據做驗證:

INSERT INTO t2(title) VALUES('new222');

在用2的語句查詢對比,它的返回結果如下: 說明兩個表中,如果相同的列名下,值不同,就會有因為數據不一致,而返回結果記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM