第二只独角兽 2023-03-15 09:22 采纳率: 50%
浏览 34
已结题

oracle两个存数组的字段,怎样实现判断他们的彼此的包含关系?

oracle数据库,一张表有两个字段A和B,A字段存的内容是“A,B,C,D,E,EE,G”,B字段存的是“A,E,G”。
有没有办法通过sql语句实现判断字段A包含B中的全部子项?

  • 写回答

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 的结果:

    img

    最终查询结果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥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上该如何部署?