获得 2 个 mySQL 表差异的更简单方法?

Posted

技术标签:

【中文标题】获得 2 个 mySQL 表差异的更简单方法?【英文标题】:Simpler way to get a diff of 2 mySQL tables? 【发布时间】:2011-02-16 16:57:10 【问题描述】:

我有两个具有相同字段的表,35 个相同的字段。

我知道我可以通过使用找出其中一个中不存在哪些行

SELECT first.a, first.b, first.c FROM first LEFT JOIN second USING(a,b,c) 
WHERE second.a IS NULL

我想知道的是,考虑到表列和列顺序是相同的,是否有更简单的方法来编写这个?

【问题讨论】:

【参考方案1】:

另一种选择是:

SELECT DISTINCT a, b, c FROM first 
WHERE (a, b, c) NOT IN
(SELECT a, b, c FROM second)

这并不简单,但它可能正是您想要的。 另外,你的版本应该更高效。

【讨论】:

其实NOT INNOT EXISTS这两个版本在mysql中通常效率更高。 @ypercube 我不知道。感谢您的提示。 检查这个:***.com/questions/3604042/… 从该问题到有关此比较的博客文章的链接:explainextended.com/2009/09/15/…【参考方案2】:

很遗憾,不是,不是在 MySQL 中。

在大多数现代 DBMS 中,您可以使用 MINUS 运算符:

SELECT col1, col2, col3
FROM tablea
MINUS
SELECT col1, col2, col3
FROM tableb

但是 MySQL 还不支持 MINUS 操作符。

【讨论】:

以上是关于获得 2 个 mySQL 表差异的更简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

比较具有相同模式的两个表以获得数据差异

为列映射记录名称的更简单方法?

MySQL InnoDB与MyISAM存储引擎差异

了解类型参数是不是在 c# 2.0 中实现接口的更简单方法是啥?

使用标签栏控制器实现导航栏项目的更简单方法?

PHP MYSQL求一个获取主键的简单方法吧!