请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

八酷博客 首页 技术分享 解决问题 查看内容

使用 join 来替代not in 做查询

2020-11-18 15:02| 发布者: admin| 查看: 9| 评论: 0|原作者: 倔强的老铁|来自: 博客园

摘要: 因为 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 谁能帮我解释一下这个
倔强的老铁

因为 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 ,用来做批量插入和批量修改

收获


geass..
文章点评