Oracle 循环递归遍历树结构查询
来源:互联网 发布:unity3d开发的小游戏 编辑:程序博客网 时间:2024/05/04 20:37
在项目中经常会接触树结构的页面; 经常会写关于查询某个树节点的所有子节点的方法,若使用java的for循环或者递归不但效率低又好性能。所以推荐使用oracle 提供的connect by prior start with 的递归查询用法。
oracle的connect by prior start with 是个双向查询树结构的功能,既可以查询子节点 ,又可以根据子节点查询上流的所有父节点; 举例如下:
准备的SQL:
drop table t_tmp_20151027;create table t_tmp_20151027( code varchar2(10) primary key, name varchar2(50), parent_code varchar2(10), create_time date default sysdate, active char(1) default 'Y');comment on column t_tmp_20151027.code is '部门编码';comment on column t_tmp_20151027.name is '部门名称';comment on column t_tmp_20151027.parent_code is '父级编码';comment on column t_tmp_20151027.create_time is '创建日期 默认sysdate';comment on column t_tmp_20151027.active is '是否有效(Y有效,默认)';select * from t_tmp_20151027;insert into t_tmp_20151027(code, name, parent_code) values('D00001', '总裁办公室', null);insert into t_tmp_20151027(code, name, parent_code) values('D01000', '企业发展办公室', 'D00001');insert into t_tmp_20151027(code, name, parent_code) values('D10000', '职能运营本部', 'D01000');insert into t_tmp_20151027(code, name, parent_code) values('D10001', '华东运行本部', 'D10000');insert into t_tmp_20151027(code, name, parent_code) values('D10002', '华南运行本部', 'D10000');insert into t_tmp_20151027(code, name, parent_code) values('D20000', '信息技术部', 'D01000');insert into t_tmp_20151027(code, name, parent_code) values('D20001', 'IT开发部', 'D20000');insert into t_tmp_20151027(code, name, parent_code) values('D20002', '运维管理部', 'D20000');具体用法:
--通过父节点查询此节点及向下递归遍历所有的子节点...select a.* from t_tmp_20151027 a, (select distinct code from t_tmp_20151027 where active = 'Y' connect by prior code = parent_code and active = 'Y' start with code = 'D00001') b where 1 = 1 and a.code = b.code and a.active = 'Y'; --通过子节点查询此节点及向上递归遍历所有的父节点 select a.* from t_tmp_20151027 a, (select distinct code from t_tmp_20151027 where active = 'Y' connect by prior parent_code = code and active = 'Y' start with code = 'D20000') b where 1 = 1 and a.code = b.code and a.active = 'Y';
0 0
- Oracle 循环递归遍历树结构查询
- oracle递归遍历查询
- ORACLE递归查询遍历详解
- 递归遍历树结构
- Oracle递归查询(目录结构查询)
- 树结构递归查询
- oracle 递归查询,向上和向下遍历
- oracle递归、合并、遍历查询实例
- oracle 递归查询,向上和向下遍历
- 【Oracle】sql循环遍历查询结果
- PB遍历递归树结构
- JS递归遍历树结构
- oracle树递归查询
- oracle 递归 树形结构数据查询
- oracle 递归查询 树查询
- oracle 递归查询 树查询
- Oracle 递归查询 树查询
- oracle树查询(递归查询)
- SVG路径动画-SMIL
- mysql排序如果有limit应该写在哪limit之前
- SwiftSocket 接收服务端byte[] 本地转换
- intent ,intent filter comments
- [Leetcode]Graph Valid Tree
- Oracle 循环递归遍历树结构查询
- ZeroClipboard.js实现js复制功能(兼容ie9 和 ie10)
- 151025的测试总结
- magento default cache using
- Activity生命周期
- 【程序5】填运算符
- winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法
- 【noip2013day1】【2015 10.27test】
- 151026的测试总结