首页 新闻 会员 周边 捐助

使用 join 来替代not in 做查询

0
悬赏园豆:5 [已解决问题] 解决于 2020-11-18 08:51

因为 not in不走索引,所以不在不得已情况下,就不要使用not in

下面使用 join 来替代not in 做查询

select ID from A where ID not in (select ID from B)

替换为

select A.ID from A left join B on A.ID=B.ID and B.ID is null
或者:
select A.ID from A left join B on A.ID=B.ID where B.ID is null

谁能帮我解释一下这个到底是啥意思
一个同事跟我解释说in 就是 is not null 那么 not in 就是 is null

倔强的老铁的主页 倔强的老铁 | 初学一级 | 园豆:184
提问于:2020-11-17 14:48
< >
分享
最佳答案
1

A left join B on A.ID=B.ID, 如果 B 表的ID 不在 A表里,就会返回 null 代替,否则 返回B.ID。是可以代替in ,not in

你用的是哪个数据库, not in 可以走索引
如果查询的列没有包含 B 表,没必要join,用性能更好的 exists
一般 left join 结合 is not null ,用来做批量插入和批量修改

收获园豆:5
geass.. | 小虾三级 |园豆:1821 | 2020-11-17 18:04
其他回答(1)
0

in not in 与is null 并无瓜葛,in 表示在某一个范围内的数据,not in 则表示不再某一范围内;使用时需要注意超过1000时 oracle会报错 需特殊处理下

攻城狮_鼠标 | 园豆:202 (菜鸟二级) | 2020-11-17 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册