• Oracle 层级查询 connect by prior再理解


    Oracle的层级查询将数据表以树形结构进行查询与整合, 其中树形结构可以理解为目录式树结构或者二叉树式树结构,
    因为一直对prior 指向的方向无法通过字义理解,所以只能每次都重新翻阅资料,2022.6.30发现,可以将其理解为递归二叉树形式,
    其中prior所指的列,为递归起始列, 具体解释与说明如下

    1.connect by 语句是将表内数据通过递归方式以树的形式整合与展示,其中start with的作用是指定数的根节点,如果不指定start with条件
    层级语句将依次将每条记录都视为根节点生成一颗对应的树进行展示, 所以start with的作用只是指定一个起始根节点,其条件可以任意指定,
    不会直接影响connect by prior的效果

    2. ****重点***** prior指定的列有什么含义?? 通过start with选择一列作为递归树的根节点,那这颗树该以什么形式向下生长呢,
    这时就用到了prior 关键字,例: connect by prior child_col = parent_col  
    其中prior指定根节点的 child_col 作为生长字段,寻找其他数据行中 parent_col字段与其值相同的节点 作为根节点的子节点,依次类推。
    可以理解为, 以child_col的值为起点,寻找所有parent_col与其相同的节点,作为子节点
    根节点--parent_col--child_col
                                      |
                        子节点1--parent_col--child_col
                        子节点1--parent_col--child_col

    如果connect by child_col = prior  parent_col
    则图例解释为其中prior指定根节点的 parent_col 作为生长字段,寻找其他数据行中 child_col字段与其值相同的节点 作为根节点的子节点,依次类推。
                          根节点--parent_col--child_col
                                         |         
      子节点1--parent_col--child_col
      子节点1--parent_col--child_col


    测试用例

    with tbl as
    (
        select 'A' as parent_cd, 'C' as child_cd from dual
         union all
        select 'A' as parent_cd, 'D' as child_cd from dual
         union all
        select 'C' as parent_cd, 'B' as child_cd from dual
         union all
        select 'D' as parent_cd, 'E' as child_cd from dual
         union all
        select 'C' as parent_cd, 'F' as child_cd from dual
         union all
        select 'B' as parent_cd, 'H' as child_cd from dual
    )
    select level, tbl.* from tbl
    connect by   child_cd = prior parent_cd
    --start with parent_cd = 'B'
     order by level, parent_cd;

  • 相关阅读:
    Java 如何让HashMap集合按照key进行排序呢?
    Expected linebreaks to be ‘LF‘ but found ‘CRLF‘. 使用 ESlint 插件自动格式化配置 解决报错
    Inno Setup 选择安装路径的问题
    .NET 6 使用 LogDashboard 可视化日志
    【Python百日进阶-Web开发-Feffery】Day400 -“一起Dash”训练营Lesson-09_利用多页面应用_课堂
    【Linux】Linux中的基本概念
    图论---图的遍历
    Android 源码 <Activity> 桌面启动一 [5]
    小白学流程引擎-FLowable(二) — 从零搭建自己的FLowable服务 — 搭建流程服务-FLowable的新手指南
    [manacher/二分+哈希]KFC Crazy Thursday 2022牛客多校第5场 G
  • 原文地址:https://blog.csdn.net/richieruan/article/details/125549382