如何比较两个表是否具有相同的数据?

Cra*_*lus 0 mysql sql linux subquery

如果我有 2 个表并想查找它们是否具有相同的数据,那么最直接的方法是什么MySQL
我已经阅读了有关执行相关子查询的信息,UNION ALL但是该查询大约有 2 页(!),并且无法真正遵循它正在执行的操作。必须有更简单的方法。
即使是例如MySQL将表数据复制到文件并执行vimdiff(我不确定这是否可能 - 是吗? - 只是大声思考)。

更新
我只对表数据感兴趣,对结构不感兴趣。这是为了澄清由于我发表的一个模棱两可的评论

Sto*_*ica 6

如果您只想尽可能有效地判断表是否相同,请使用以下查询:

SELECT 1 FROM (
   SELECT * FROM table1
   UNION ALL
   SELECT * FROM table2
) t
GROUP BY col1, col2, col3
HAVING count(*) = 1
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
  • 列出所有列GROUP BY以比较整个表。

  • 如果结果是空集,则两个表是相同的。

如果要查看差异,请使用以下查询:

SELECT * FROM (
   SELECT 'table1' tname, col1, col2, col3 FROM table1
   UNION ALL
   SELECT 'table2' tname, col1, col2, col3 FROM table2
) t
GROUP BY col1, col2, col3
HAVING count(*) = 1
Run Code Online (Sandbox Code Playgroud)
  • 列出在内部相同的列SELECT作为GROUP BY,加上列来区分两个表。