如何使用多列关联JOIN改写给定NOT EXISTS逻辑的SQL查询
等效JOIN查询实现
实现代码
SELECT A.id_pk, A.col1, A.col2, A.col FROM table1 A LEFT JOIN table2 B ON A.id_pk = B.id_pk AND A.col1 = B.col1 AND A.col2 = B.col2 WHERE B.id_pk IS NULL;
注意事项
- 三个字段的匹配条件必须全部放在
ON子句中,不能挪到WHERE子句里,否则左连接会被过滤为内连接效果,无法筛选出未匹配的记录 WHERE子句选择B表的非空字段做NULL判断即可,这里选择关联用的id_pk是因为主键天然非空,不会出现字段本身为NULL导致的误判- 该写法和原
NOT EXISTS查询结果完全一致,MySQL、PostgreSQL、Oracle等主流数据库的优化器会将两者识别为等效执行计划,执行效率没有差异
内容的提问来源于stack exchange,提问作者JYOTHI REDDY
相关产品推荐
相关产品推荐

