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无用