oracle数据库,一张表有两个字段A和B,A字段存的内容是“A,B,C,D,E,EE,G”,B字段存的是“A,E,G”。
有没有办法通过sql语句实现判断字段A包含B中的全部子项?
oracle两个存数组的字段,怎样实现判断他们的彼此的包含关系?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- leaf_cq 2023-03-15 10:52关注
1、正常思路是将B字段拆分为行,然后与A字段进行匹配,返回的行数与拆分的行数相等即满足条件
2、使用正则覆盖,不过有个前提:B字段中不能有重复,如不存在类似:“A,E,G,A”这样的数据:WITH t0 AS ( SELECT 'A,B,C,D,E,EE,G' a, 'A,E,G' b FROM dual ) , t1 AS ( -- 构建A字段完全状态,构建B字段的正则覆盖样式 SELECT a, b, ',' || a || ',' c, ',' || REPLACE( b, ',', ',|,' ) || ',' d FROM t0 ) , t AS ( -- 进行正则匹配和各字段长度计数 SELECT a, b, LENGTH( b ) bl, c, LENGTH( c ) cl, d, LENGTH( d ) dl, regexp_replace( c, d, '' ) e, LENGTH( regexp_replace( c, d, '' ) ) el FROM t1 ) SELECT * FROM t WHERE ( cl - el ) = ( dl - ( dl - 2 - bl ) / 2 ); -- 筛选出目标数据
with中的子查询 t 的结果:
最终查询结果:
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?