oracle中 connect by prior 递归算法

本文详细解析了在数据库中使用CONNECT BY进行层级查询的方法,包括如何通过START WITH和PRIOR关键字设置查询起点和父子节点关系,以及如何利用LEVEL虚拟列标识节点层级。并通过具体示例展示了查询过程及注意事项。

表INDICATIONSYSTEM

表中对应关系的字段为ID,PID

 

表中包含5个level,其中PID为0为level1,

PID为0,对应ID值为1,2,3,即PID为1,2,3时,为level2

为简化理解,以PID为1举例

PID为1,对应的ID值为4,5,6,7,8,即,PID为4,5,6,7,8时,为level3,

为简化理解,以PID为4举例

PID为4,对应的ID值为9,10,11,12,即,PID为9,10,11,12时,为level4

为简化理解,以PID为9举例

PID为9,对应的ID 值为23,24,25,为最后一层,level5

 

SELECT

    ID as INDICATIONSYSTEMID,NAME as INDICATIONSYSTEMNAME,PID

FROM INDICATIONSYSTEM

START WITH PID = 1

CONNECT BY PRIOR ID = PID

ORDER BY LEVEL

结果:

1.PRIOR

   阶层查询的CONNECY BY condition的条件式需要用到PRIOR来指定父节点

2.CONNECT BY

   通过CONNECT BY子句定义子节点和父节点的关系,本例中PID为父节点,ID为子节点

3.start with

   通过start with 指定根节点(不指定start with会出现重复记,不指定NOCYCLE没事)

4.LEVEL

   通过LEVEL虚拟列表示节点的关系

5.order SIBLINGS BY id :按id进行排序

 

注意:此关系中PID为父节点,ID为子节点,PID从1开始,向下查询

 

如果将ID与PID调换位置,PID为子节点,ID为父节点

PID从1开始,向上查询

where关键字

如果查询需要添加where所限定的条件,将where放在“from 表名”后,“start with”前

即:

SELECT

    ID as INDICATIONSYSTEMID,NAME as INDICATIONSYSTEMNAME,PID

FROM INDICATIONSYSTEM

WHERE PID <= 4

START WITH PID = 1

CONNECT BY PRIOR ID = PID

ORDER BY LEVEL

如果将where语句放在最后将无法正确结束命令

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值