当前位置: 首页 > news >正文

oracle:NOT IN

在Oracle数据库中,NOT IN运算符的使用需要特别注意其与NULL值的交互问题及性能优化方案。以下是关键要点:
1. ‌NOT IN与NULL值的陷阱‌

当子查询结果集中包含NULL值时,NOT IN会导致查询返回空集。这是因为NOT IN的逻辑等价于多个AND连接的<>条件,而任何值与NULL比较的结果均为UNKNOWN,最终使整个条件失效。
示例‌:
-- 若子查询返回包含NULL的结果集,以下查询将无输出
SELECT * FROM table1 WHERE col1 NOT IN (SELECT col2 FROM table2);

2. ‌替代方案与优化建议‌
(1)使用NOT EXISTS

通过关联主表与子查询避免NULL值问题,且通常效率更高:
SELECT * FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t2.col2 = t1.col1);

(2)使用LEFT JOIN

通过外连接筛选未匹配的记录:
SELECT t1.* FROM table1 t1
LEFT JOIN table2 t2 ON t1.col1 = t2.col2
WHERE t2.col2 IS NULL;

(3)显式处理NULL值

若必须使用NOT IN,需排除子查询中的NULL值:
SELECT * FROM table1
WHERE col1 NOT IN (SELECT col2 FROM table2 WHERE col2 IS NOT NULL);

3. ‌性能对比与适用场景‌

    ‌NOT IN‌:适合子查询结果集小且无NULL值的情况,但需注意全表遍历的性能开销。
‌NOT EXISTS‌:推荐用于大表关联,可利用索引提升效率。
‌LEFT JOIN‌:适用于需要同时输出关联表字段的场景。

4. ‌实际案例中的问题解决‌

某案例中,使用NOT IN过滤状态为“已作废”的记录时,因字段存在NULL值导致数据遗漏。修正方案为改用NOT EXISTS或添加OR IS NULL条件:
-- 修正方案1
SELECT * FROM table WHERE status NOT IN ('已作废') OR status IS NULL;
-- 修正方案2(推荐)
SELECT * FROM table t
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id = t.id AND status = '已作废');

总结

在Oracle中应优先使用NOT EXISTS或LEFT JOIN替代NOT IN,尤其在涉及NULL值或大数据量时。若必须使用NOT IN,需显式处理NULL值以避免逻辑错误。

http://www.dtcms.com/a/495652.html

相关文章:

  • 【入门级-算法-4、算法策略:前缀和】
  • 在NVIDIA Jetson Orin NX (Ubuntu 22.04, JetPack 5.1, CUDA 11 cuDnn8) 上安装PyTorch 2
  • 权重2的网站网址大全免费网站
  • 上海开发网站寻找五屏网站建设
  • 写好 React useEffect 的终极指南
  • 「日拱一码」121 多组学因素分析MOFA
  • Bootstrap 多媒体对象
  • 茶叶网站规划河南省建设工程招标投标协会网站
  • Bootstrap 输入框组
  • 做国内电影网站赚钱不一个空间能放几个网站
  • 带高度多边形,生成3D建筑模型,支持多种颜色或纹理的OBJ、GLTF、3DTiles格式
  • JSP 自定义标签
  • 高效压缩 PDF 文件大小(3 大实用的 Python 库)
  • yum安装的一些问题
  • 网站建设需要的资料库存管理
  • LangChain PromptTemplate 全解析:从模板化提示到智能链构
  • debug - MCUXpresso - 将NXP工程编译过程的所有命令行参数找出来
  • 基于MATLAB的多棵树分类器(随机森林)
  • 瑞芯微RK3588平台FFmpeg硬件编解码移植及性能测试实战攻略
  • 外贸做企业什么网站wordpress在线计算程序
  • 开发个网站开票名称是什么网站的策划分析
  • swift不同的语言环境使用不同的AppName,CFBundleDisplayName
  • php建站程序合肥网站建设讯息
  • 创建网站需要准备哪些资料广汉网站建设ghxhwl
  • SD comfy:教程1
  • 第三十六篇|东方国际学院的教育数据建模实践:首都圈日本语学校的费用结构、生源分布与治理参数分析
  • 保障数据采集稳定性:设计针对淘宝 API 的熔断、降级与重试机制
  • 物流公司网站方案wordpress 文章链接
  • 题解:P14063 [PO Final 2022] 海滩 / Badstrand
  • 虎扑的网站是用什么技术做的短视频推广