暂无图片
oracle查出a表数据不在b表C表的数据
我来答
分享
刘广
2021-10-26
oracle查出a表数据不在b表C表的数据
暂无图片 10M

需求:想高效查出A表不在B表和C表的数据

关联关系:A表的ID主键和B表的YWBH关联,A表的ID主键和C表的RYBH关联。

数据量:A表(200万)  B表(1500万) C表(3200万)

索引:连接条件都具备索引。

我是这样写的:

select a.* from a

where not exists(select ywbh from b where a.id=b.YWBH)

and a.rybh not in(select rybh from c where c.rybh=a.systemid)

请问大家,这样写是否符合SQL语法,不知道逻辑对不对,哪位高手有更专业的写法请指点一下,谢谢!

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
📵

WHERE NOT EXISTS (SELECT * FROM B WHERE a.id=b.YWBH)
and NOT EXISTS (SELECT * FROM C WHERE c.rybh=a.systemid)

确保表里(NOT EXISTS)不能有空值,有空值就sql语句就不对了。not in oracle会倾向忽略索引,但不是一定

暂无图片 评论
暂无图片 有用 2
暂无图片
文成

看一下执行计划

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏