为了自动化Users
数据库的备份过程,我想比较两个表的结构(Users
与ArchivedUsers
)。
我想比较两个表之间的列以确保存在相同的列,即像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;
您能想到一个可以比较两个表中的列的查询吗?
最佳答案
有几种方法可以做到这一点,但是对于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
该查询来自Jeff Smith(here)的博客。
这种方法的优点是您可以知道哪个表具有不同的行
关于此主题的一个较早的SO问题在这里显示了其他方法,特别是对于以下支持EXCEPT或MINUS的DBMS平台:
SQL compare data from two tables
关于mysql - 比较两个MYSQL表之间的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44077482/