oracle 分层 树状结构的查询 connect by prior

直接看效果

WITH TR_TREE(id, parent_id, path)
AS (
    -- 文件目录 /var/lib/nginx
    SELECT 1, null, 'var' from dual union all
    SELECT 2, 1, 'lib' from dual union all
    SELECT 3, 2, 'ngix' from dual
)

select 
    SYS_CONNECT_BY_PATH(T.path, '/') TR_PATH,
    LEVEL DEPTH,
    T.id, T.parent_id, T.path
from
    TR_TREE T

connect by 
    -- 从当前节点到子节点
    prior T.ID = T.PARENT_ID
    -- 从当前节点到根节点
--    T.ID = prior T.PARENT_ID
start with
    -- 当前节点
    T.path = 'lib'
order siblings by
    path desc

结果:

1. 从当前节点到子节点

2. 从当前节点到根节点

注意到SQL里prior放在不同的列里,tr_path的方向就变了。

prior是在oracle里是一个一元运算符(和加减号是一个优先级别的,可以瞬间识别出来)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值