【问题标题】:Compare columns between two MYSQL tables比较两个 MYSQL 表之间的列
【发布时间】:2017-05-19 19:14:38
【问题描述】:

为了自动化Users数据库的备份过程,我想比较两个表的结构(Users vs 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


    【解决方案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
    

    此查询来自 Jeff Smith (here) 的博客

    这种方法的优点是你可以知道哪个表有不同的行

    关于此主题的较早 SO 问题在这里显示了其他方法,特别是对于支持 EXCEPT 或 MINUS 的 DBMS 平台: SQL compare data from two tables

    【讨论】:

    • 感谢 @Used_By_Already 的失败,阅读也很棒!
    • 很高兴能确定。享受。
    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多