2017-05-19 155 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

很高兴可以肯定。请享用。 –