相关阅读:
Oracle 递归遍历树结构

区别于递归遍历树,level 可以实现自我迭代(实际上是递归层的概念):

select level from dual connect by level<13;

常用的十二个月(将 level 作为字段,便有了更多可能):

select '2020'||lpad(level,2,0) from dual connect by level<13;

另一个例子,将字符串拆分成单个字符:

select substr('abcdefg', level, 1)
from dual
connect by level <= length('abcdefg');

结合 [[Oracle 专题] SQL 递归遍历树结构]() 递归的例子,扩展显示递归层:

select t.id, level
from tmp_pror t
start with t.id = '2'
connect by nocycle prior t.id = t.pid;

那么我如果只要第二层的数据的话就会简单多了,在外层添加条件即可;

另,level 也可以加到 connect by 子句中:

select t.id, level
from tmp_pror t
start with t.id = '2'
connect by nocycle prior t.id = t.pid and level < 4;

分层查询伪列,Oracle 12c 官网描述:

https://docs.oracle.com/en/database/oracle/oracle-database/20/sqlrf/Hierarchical-Query-Pseudocolumns.html#GUID-2F2FBA6F-2FD1-47D6-A74F-DB4B31E4D400

官网还有 CONNECT_BY_ISCYCLE、CONNECT_BY_ISLEAF:

select t.id, level, CONNECT_BY_ISCYCLE, CONNECT_BY_ISLEAF
from tmp_pror t
start with t.id = '2'
connect by nocycle prior t.id = t.pid;

CONNECT_BY_ISCYCLE:判断其子节点是否为父节点,循环判断。

CONNECT_BY_ISLEAF:判断是否为叶子节点。

最后修改:2021 年 10 月 25 日
如果觉得我的文章对你有用,请随意赞赏