mysql - 如果 2 个表具有相同的数据,我如何比较?

标签 mysql sql linux subquery

如果我有 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/

相关文章:

c# - 在循环中动态更改 C# 变量名称

mysql - 无法在 mysql-workbench 上添加外键约束

sql - SELECT MIN Date(使用WINDOW函数)和MAX Date(使用JOIN相关字段)一起

linux - 我可以在我的计算机上使用 emacs 通过 ssh 将 C 代码编译到 linux 终端吗?

linux - .zshrc 的执行抛出错误 1. 自动加载 : command not found syntaxr error ; 2. oh-my-zsh.sh:第 41 行:意外标记附近的语法错误

用于通过 rDesktop 测试 GUI 应用程序的 Linux 软件

mysql - 如何将 longblob 转换为可读格式

php - Register.php不插入sql查询

mysql - Eclipselink:临时表的列长度和 mb4

sql - JOINS,EXISTS或IN中哪个更好?关于SQL的几个问题