如果我有 2 个表并且想查找它们是否具有相同的数据,在 MySQL
中最直接的方法是什么?
我读过有关执行相关子查询和 UNION ALL
的内容,但此查询大约有 2 页(!),无法真正理解它在做什么。一定有更简单的方法。
即使是例如让 MySQL
将表数据复制到文件并执行 vimdiff
(我不确定这是否可能 - 是吗? - 只是大声思考)。
更新
我只对表数据而不是结构感兴趣。这是为了澄清,因为我发表了模棱两可的评论
最佳答案
如果您只想尽可能高效地判断表是否相同,请使用此查询:
SELECT 1 FROM (
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
) t
GROUP BY col1, col2, col3
HAVING count(*) = 1
LIMIT 1
列出
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
- 在内部
SELECT
中列出与GROUP BY
中相同的列,加上一列以区分两个表。
关于mysql - 如果 2 个表具有相同的数据,我如何比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17411866/