因为 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
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 ,用来做批量插入和批量修改
in not in 与is null 并无瓜葛,in 表示在某一个范围内的数据,not in 则表示不再某一范围内;使用时需要注意超过1000时 oracle会报错 需特殊处理下