为了自动化Users数据库的备份过程,我想比较两个表的结构(UsersArchivedUsers)。

我想比较两个表之间的列以确保存在相同的列,即像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/

10-16 13:36