oracle:Level……start with……connect by parent_id = prior id

文章主要参考:https://www.cnblogs.com/xiao-zhang-blogs/p/7147369.html

经测试后得出此案例,如有错误之处,欢迎批评指正

总结:此语法是查询id为123456,且prior在id一侧,则id为父节点,parent_id为子节点,

翻译过来就是查询根节点id为123456的数据,以及parent_id='123456‘的叶子节点的数据,level表示层级关系,根节点表示1,一级叶子节点表示2,二级叶子节点表示3,一次类推。

案例:

现在有一组这样的数据,以树的结构存在数据库中:

语法结构及具体案例一:
        SELECT
            id,
            LEVEL AS lv
        FROM
            tableA

START WITH id = '123456'

CONNECT BY parent_id = PRIOR id;

解释:start with:以id为123456的开始,

connect by parent_id = prior id;将id 与parent_id进行了连接,id为父节点,parent_id为子节点

PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上

 PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。比如:
CONNECT BY EMPNO=PRIOR MGR

总结(自己理解):connect by prior column1 = column2 或者 connect by  column2 = prior column1 写法都可以,

主要看prior写在谁的前面,prior写在谁的前面谁就作为父级值(参照值),也就是说[connect by prior column1 = column2]的意思就是是 按start with 条件查询出的记录行,以column1为参考值,查询column2为column1值的记录。

 此条来源连接:https://mp.csdn.net/postedit/103250347

则我上边的那段代码,表示从叶节点到子节点遍历,

执行具体案例一的代码后,效果是这样的:

level我在上边代码中重命名成了LV,1 2 表示了树中的层级管理,1表示根节点,2表示叶子,两个2 两个叶子,

然后就可以获取我们想要的数据了,我这需要的是最大层级数,即

SELECT
    MAX( lv )
FROM
    (
        SELECT
            id,
            LEVEL AS lv
        FROM
            tableA START WITH id = '' CONNECT BY parent_id = PRIOR id
    );

 max(lv) 获取了最大的层级数。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值