【发布时间】: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
标签: mysql sql database join outer-join