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

用in函数嵌入子查询作为条件时查出结果为空

用in函数嵌入子查询作为条件时查出结果为空

问题:

SELECT * FROM SGGCDB_VIEW sv WHERE RES_ID IN  (SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE  urrv.ID_ = '1069978138403930112'
)

结果未空值。
原因:

  • 首先,SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE urrv.ID_ = '1069978138403930112'查询结果为
    在这里插入图片描述
  • 再来考虑,
    expression [NOT] IN (subquery)subquery - 子查询返回一列的结果集以测试匹配。该列还必须具有与表达式相同的数据类型。
  • 还有,
    –只要子查询中返回值包含null值,不要使用not in,因为not in 等同与<> ALL(不等于所有值),就包括<>null ,然后不管是=null还是<>null 都是否,因为判断为空用is null,is not null
    比如,a not in(10,null)相当于a!=10 and a!=null,然而a!=null永远为假
    所以正确的方法,去掉子查询空值
SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE urrv.RES_ID IS NOT NULL
  • 那问题还是查询结果为空
    那是因为,子查询作为in的条件时是以整列作为条件,意思就是
SELECT a.name FROM a ;

结果是

name
张三
李四
王五

执行语句

SELECT b.* FROM b WHERE b.name IN ( SELECT a.name FROM a ) ;

等同于

SELECT b.* FROM b WHERE b.name IN ( '张三','李四','王五' ) ;

但是如果,执行语句

SELECT c.name FROM c ;

结果为

name
张三,李四,王五
赵六

执行语句

SELECT b.* FROM b WHERE b.name IN ( SELECT c.name FROM c ) ;

等同于

SELECT b.* FROM b WHERE b.name IN ( '张三,李四,王五','赵六' ) ;

所以结果永远不可能匹配,因为没有一个b.name=‘张三,李四,王五’ ,因为没有人的名字叫【张三,李四,王五】,最多匹配到b.name=‘赵六’,因为数据中真的有人名字叫做【赵六】的

  • 处理方法:
SELECT REGEXP_SUBSTR( xx.RES_ID ,'[^,]+', 1, level  ) 
FROM ( SELECT * FROM (SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE urrv.RES_ID IS NOT NULL AND  urrv.ID_ = '1069978138403930112' ) WHERE rowNum    < 2 ) xx 
CONNECT BY REGEXP_SUBSTR(xx.RES_ID ,'[^,]+', 1, level ) IS NOT NULL ;

结果
在这里插入图片描述

完整:

SELECT * FROM SGGCDB_VIEW sv WHERE RES_ID IN  (
SELECT REGEXP_SUBSTR( xx.RES_ID ,'[^,]+', 1, level  )
FROM ( SELECT * FROM (SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE urrv.RES_ID IS NOT NULL AND  urrv.ID_ = '1069978138403930112' ) WHERE rowNum    < 2 ) xx
CONNECT BY REGEXP_SUBSTR(xx.RES_ID ,'[^,]+', 1, level ) IS NOT NULL
);
http://www.lryc.cn/news/58445.html

相关文章:

  • 电商行业如何利用飞项解决跨部门协作难题
  • 全网最详细,Jmeter性能测试-性能基础详解,参数化函数取值(二)
  • 选择排序的简单理解
  • 使用js封装一个循环链表
  • NumPy 秘籍中文第二版:二、高级索引和数组概念
  • 新品-图灵超频工作站GT430M介绍
  • js时间格式化精确到毫秒
  • QT样式表详解
  • 最值得入手的好物有哪些,推荐几款实用的数码好物
  • 【20230407】NVIDIA显卡算力、Jetson比较
  • dsl语法
  • 不让CPU偷懒
  • 动力节点王鹤SpringBoot3笔记——第七章 视图技术Thymeleaf
  • 从比特保存和信息保存看数字资源长期保存
  • 兰伯特光照模型(Lambert Lighting)和半兰伯特光照模型(Half-Lanbert)
  • Python 进阶指南(编程轻松进阶):二、环境配置和命令行
  • 求职半年,三月成功拿到阿里offer,分享一波面经...
  • 餐饮店的运营需要考虑哪些方面
  • Multi-modal Alignment using Representation Codebook
  • 关于vector的emplace_back和push_back的区别
  • Vue——表单输入绑定
  • MySQL性能优化(二)索引
  • < 每日闲谈:你真的了解 “ ChatGPT ” 嘛 ? >
  • 改善Instagram客户服务的6个技巧
  • 8年经验之谈:4步解决测试与开发人员有争议的bug问题...
  • Linux日常小技巧shell脚本
  • 技术创业者必读:从验证想法到技术产品商业化的全方位解析
  • Docker Registry 本地镜像发布到私有库
  • Pytorch构建ResNet-50V2
  • 【01】PointNet论文解析