如何获取一个MySql表中存在的记录而不是另一个[重复]

Posted

技术标签:

【中文标题】如何获取一个MySql表中存在的记录而不是另一个[重复]【英文标题】:How to get records that exist in one MySql table and not another [duplicate] 【发布时间】:2013-09-14 05:53:09 【问题描述】:

我需要编写一个查询来返回存在于一个 mysql 表中但不存在于另一个表中的记录。在这个例子中,我想要所有存在于wafer_log 表中但不存在于bt_log 表中的晶圆。

这是我正在使用的当前查询:

    SELECT wafer_log.wafer, bt_log.id AS blid, wafer_log.id AS wlid 
    FROM bt_log RIGHT OUTER JOIN wafer_log
    ON bt_log.waferid = wafer_log.wafer
    WHERE wafer_log.wafer IS NOT NULL AND bt_log.id IS NULL;

我的想法是从我关心的表中获取晶圆名称以及两个表的 id,并对晶圆名称进行外部连接。从那里,我想查看wafer_log 表中的wafer name 不为null 并且bt_log 中的id 为null 的所有结果。

我觉得结果看起来不太对。

任何帮助将不胜感激。

【问题讨论】:

这类似于标记为重复但不相同的问题。至于选择的答案,是的,它可以工作,但是子查询(NOT IN (SELECT))呈指数级下降。更好的响应是:SELECT wafer_log.wafer, wafer_log.id AS wlid FROM bt_log LEFT JOIN wafer_log ON bt_log.waferid = wafer_log.wafer WHERE wafer_log.wafer IS NULL; 遍历 bt_log 并显示任何未找到的晶圆日志。最佳结果假设wafer_log.wafer 和bt_log.waferid 已编入索引。 dev.mysql.com/doc/refman/5.0/en/join.html 【参考方案1】:

您不需要加入来执行此操作,假设“id”是您的主键,您可以使用子查询:

SELECT wafer_log.wafer, wafer_log.id AS wlid 
FROM wafer_log
WHERE wafer_log.id NOT IN (SELECT id FROM bt_log);

【讨论】:

这需要将bt_log的所有行查询到内存中的临时表中。不好!

以上是关于如何获取一个MySql表中存在的记录而不是另一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 根据记录是不是存在于另一个表中选择布尔值

SQL中,如何查询存在一个表而不在另一个表中的数据记录

如何获取另一个表中不存在的表的记录?

Laravel - 从一个表中获取不存在于另一个表中的记录,并附加了 where 子句

如何编写一个 MySQL 查询,该查询返回一个临时列,其中包含与该行相关的项目是不是存在于另一个表中的标志

SQL中,如何查询存在一个表而不在另一个表中的数据记录