oracle树形删除怎样解决,Oracle树形结构数据---常见处理情景

Oracle树形结构数据---常见处理情景

1.查看表数据结构

SELECT *

FROM QIANCODE.TREE_HIS_TABLE T

ORDER BY T.NODE_LEVEL;

其中:NODE_SID_DESC显示的是当前行中节点的‘节点详情’。

部分数据如下图所示:

05f262183c1673b17acc97aaaac35aeb.png

2.树形结构数据--处理情景

处理情景一:查询出某个节点下的所有叶子节点

查询代码如下:

SELECT *

FROM(SELECT A.RN

,A.NODE_CODE

,A.NODE_NAME

,A.NODE_PID

,A.NODE_SID_DESC

,LEAD(A.LEVELSS) OVER(ORDER BY RN) AA

--1.2只有叶子节点才有 AA<=A.LEVELSS,即找出所有的叶子节点

,CASE

WHEN LEAD(A.LEVELSS) OVER(ORDER BY RN)>A.LEVELSS THEN

0

ELSE

1

END LEAF

--1.1查找某节点及该节点下的所有子孙节点

FROM(SELECT  ROWNUM RN

,T.NODE_CODE

,T.NODE_NAME

,T.NODE_PID

,T.NODE_SID_DESC

,LEVEL  LEVELSS

FROM QIANCODE.TREE_HIS_TABLE T

START WITH T.NODE_CODE='1'

CONNECT BY PRIOR T.NODE_CODE=T.NODE_PID) A

)B

WHERE B.LEAF=1;

查询思路:第一步,通过connect by..start with 查出该节点及该节点下的所有子孙节点,并查出该查询结果下的伪列rownum;

第二步,使用分析函数over(),根据rownum进行排序,LEAD(A.LEVELSS) OVER(ORDER BY RN)>A.LEVELSS查询出当前行的下一行数据对应的层级是否大于当前行的层级,如果下一行数据的层级小于当前行层级,则表明当前行为叶子节点(因为当前数据已经按查询节点下的子孙节点层级组成结构依次排序)。

第三步,查询出所有步骤二中所有叶子节点,即为该查询节点下的所有叶子节点。

----------------------------------==============================更多内容持续更新中==================================================--------------------------

Oracle树形结构数据查询的基本知识请查看:https://www.cnblogs.com/zhoudaqianhahaOracleShuXing111

Oracle窗口函数基本知识请查看:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值