oracle start with connect by prior遍历父子级数据

在这里插入图片描述
上图数据是需要的实际数据
下图是目标数据
在这里插入图片描述
这是具体实现的sql

select * from MBRC_REPORTTEMPLATE t start with t.id=517828 connect by prior t.pid=t.id
union
select * from MBRC_REPORTTEMPLATE t start with t.id=517828 connect by prior t.id=t.pid;

1.首先start with connect by prior就是向下遍历向上遍历拿取父子级关系数据sql.

2.其次start with connect by prior 只能选择往上或者往下,意思就是要么往下找子级,要么往上找父级

3.然后start with 是开始的条件,意思就是你从这个点开始往上往下,可以不加,不加就代表着全部按往上或者往下的顺序给你查出来

4.最后也是最重要的,prior后面是代表着根据什么条件进行往上往下.
你不能说从这个点给劳资滚,但是你不告诉它怎么滚,滚到哪…


当前数据 pid =下一条数据的 id  
select * from MBRC_REPORTTEMPLATE t start with t.id=517828 connect by prior t.pid=t.id

1.上面的代码就是,当前代码是:从id=517828这条数据开始遍历,这条数据的pid是下一条数据的id,意思是啥,这个数据的父级是下一条数据
即:劳资去找劳资,往上遍历

                                                                             当前数据的id = 下一条数据的pid
select * from MBRC_REPORTTEMPLATE t start with t.id=517828 connect by prior t.id=t.pid;

2.上面的代码就是,当前代码是:从id=517828这条数据开始遍历,这条数据的id是下一条数据的pid,意思是啥,这个数据是下一条数据父级
即:劳资才是劳资,劳资去找儿子,往下遍历

3.union 是求并集
就是把所有数据合并去掉重复值,这个应该很好理解

4.还有一个union all 是直接求并集,但是不去重,网上说它的效率高,尽可能的情况下使用union all
嗨,问这个怎么去重啊,都重复了,java的Set去重得了呗
不过个人看来,正常的2,3条用用也不影响,再怎么排序我就几条数据这个效率能影响到哪去.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Octopus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值