如何获取一个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表中存在的记录而不是另一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 从一个表中获取不存在于另一个表中的记录,并附加了 where 子句