2017-05-19 157 views
0

要自動執行Users數據庫的備份過程,我想比較兩個表(UsersArchivedUsers)的結構。比較兩個MYSQL表之間的列

我想比較兩個表之間的列,以確保存在相同的列,即firebase_id列不會被添加到Users表中,也不會被添加到ArchivedUsers表中。

stackexchange上的用戶@RolandoMySQLDBA將放在一起的查詢比較數據庫中的兩個表。

SELECT IF(COUNT(1)>0,'Differences','No Differences') Comparison FROM 
(
    SELECT 
     column_name,ordinal_position, 
     data_type,column_type,COUNT(1) rowcount 
    FROM information_schema.columns 
    WHERE table_schema=DATABASE() 
    AND table_name IN ('users','archived_users') 
    GROUP BY 
     column_name,ordinal_position, 
     data_type,column_type 
    HAVING COUNT(1)=1 
) A; 

你能想到一個可以比較兩個表中的列的查詢嗎?

回答

1

有幾種方式做到這一點,但對MySQL我的建議是:

SELECT MIN(TableName) as TableName, ID, COL1, COL2, COL3 ... 
FROM 
(
    SELECT 'Table A' as TableName, A.ID, A.COL1, A.COL2, A.COL3, ... 
    FROM A 
    UNION ALL 
    SELECT 'Table B' as TableName, B.ID, B.COL1, B.COl2, B.COL3, ... 
    FROM B 
) tmp 
GROUP BY ID, COL1, COL2, COL3 ... 
HAVING COUNT(*) = 1 
ORDER BY ID 

該查詢從博客傑夫·史密斯(here

採購這種方法的優點是你瞭解哪個表具有不同的行

有關此主題的早期SO問題在此處顯示其他方法,尤其是針對支持EXCEPT或MINUS的DBMS平臺的其他方法: SQL compare data from two tables

+0

謝謝@Used_By_Already對於跑步,閱讀也很棒! – VegaStudios

+0

很高興可以肯定。請享用。 –