oracle递归
来源:互联网 发布:穿越火线数据异常36_2 编辑:程序博客网 时间:2024/05/17 15:38
建表语句:
create table node(id integer primary key,name varchar2(20),father_id integer );insert into node(id,name,father_id) values(1,'1_node',null);insert into node(id,name,father_id) values(11,'11_node',1);insert into node(id,name,father_id) values(12,'12_node',1);insert into node(id,name,father_id) values(121,'121_node',12);insert into node(id,name,father_id) values(122,'122_node',12);insert into node(id,name,father_id) values(1221,'1221_node',122);insert into node(id,name,father_id) values(12211,'12211_node',1221);insert into node(id,name,father_id) values(12212,'12212_node',1221);
- 查询某节点的所有子孙节点(包括该节点)
SELECT * FROM node START WITH id=122 CONNECT BY PRIOR id=father_id;结果:
ID NAME FATHER_ID
--------------------------------------- -------------------- ---------------------------------------
122 122_node 12
1221 1221_node 122
12211 12211_node 1221
12212 12212_node 1221
注:如果想剔除该节点将上面的sql语句中的id=122改成father_id=122.
- 查询某节点的所有祖先节点(包括该节点)
SELECT * FROM node START WITH id=122 CONNECT BY PRIOR father_id=id;结果:
ID NAME FATHER_ID
--------------------------------------- -------------------- ---------------------------------------
122 122_node 12
12 12_node 1
1 1_node
注:如果想剔除该节点将上面的sql语句中的id=122改成id=(SELECT father_id FROM node where id=122)。
- CONNECT BY子句实列的应用
LEVEL:查询节点层次,从1开始。CONNECT_BY_ISLEAF:查询节点是否是叶子节点,是则为1,不是则为0SELECT id,name,father_id,LEVEL,CONNECT_BY_ISLEAFFROM node START WITH id=122 CONNECT BY PRIOR id=father_id ORDER BY ID;
结果:
ID NAME FATHER_ID LEVEL CONNECT_BY_ISLEAF
--------------------------------------- -------------------- --------------------------------------- ---------- -----------------
122 122_node 12 1 0
1221 1221_node 122 2 0
12211 12211_node 1221 3 1
12212 12212_node 1221 3 1
- 查询递归路径
SELECT id,name,father_id, SUBSTR(SYS_CONNECT_BY_PATH(name,'->'),3)pathFROM node START WITH id=122 CONNECT BY PRIOR id=father_id;结果:
ID NAME FATHER_ID PATH
--------------------------------------- -------------------- --------------------- -----------------------------------------------
122 122_node 12 122_node
1221 1221_node 122 122_node->1221_node
12211 12211_node 1221 122_node->1221_node->12211_node
12212 12212_node 1221 122_node->1221_node->12212_node
- Oracle 递归
- oracle递归
- Oracle递归
- oracle 递归
- Oracle递归
- oracle递归
- oracle递归语句
- oracle递归查询
- oracle 递归查询
- ORACLE的递归查询
- oracle 递归查询
- Oracle 递归查询
- Oracle递归查询
- Oracle递归函数
- ORACLE 递归删除数据
- oracle 递归查询
- ORACLE递归查询
- Oracle 递归查询
- Parentheses Balance 平衡的括号 UVA 673 (DFS求解)
- 删除数字
- 删除数据库指定的表空间及注意事项
- STL之双端队列
- 2017年读书笔记
- oracle递归
- Oracle数据库:impdp导入数据库及expdp导出数据过程详解
- 使用方法注入—协调不同作用域(singleton、prototype)的bean
- linux下oracle10g监听无反应
- JavaScript中的原型链及继承
- [CSAPP] 虚拟存储器(一)
- MongoDB 分片(一)
- uva 1640 The Counting Problem (数位dp||统计0-9的个数)
- 问题三十四:怎么用ray tracing画任意长方体(generalized box)