oracle递归查询子节点

Posted Debugs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle递归查询子节点相关的知识,希望对你有一定的参考价值。

通过子节点向根节点追朔.

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

通过根节点遍历子节点(不包含根节点).

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

通过根节点遍历子节点(包含根节点).

select * from persons.dept start with deptid=0 connect by prior deptid=paredeptid

可通过level 关键字查询所在层次.

select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid

备注:
start with ...connect by 的用法, start with 后面所跟的就是就是递归的种子。
递归的种子也就是递归开始的地方 connect by 后面的"prior" 如果缺省:则只能查询到符合条件的起始行,并不进行递归查询;
connect by prior 后面所放的字段是有关系的,它指明了查询的方向。

练习: 通过子节点获得顶节点
select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid
表结构
DEPTID PAREDEPTID NAME
NUMBER NUMBER CHAR (40 Byte)
部门id 父部门id(所属部门id) 部门名称









以上是关于oracle递归查询子节点的主要内容,如果未能解决你的问题,请参考以下文章

oracle递归查询子节点

oracle递归查询子节点

java 找到一节点的所有子节点 是否得递归实现?

SQL递归查询所有子节点

高手帮忙:sql 里怎样递归判断父节点和子节

oracle递归查询