ORACLE 树形遍历查询根节点、父节点、子节点
1、准备演示数据
创建表结构:
-- Create table createtable Z_ORG( cid NUMBER, cname VARCHAR2(32), parent_id NUMBER, create_time DATE, org_level NUMBER) tablespace POWERDESK pctfree10 initrans1 maxtrans255; -- Add comments to the table commentontable Z_ORG is'机构组织简化表'; -- Add comments to the columns commentoncolumn Z_ORG.cid is'主键ID'; commentoncolumn Z_ORG.cname is'组织名称'; commentoncolumn Z_ORG.parent_id is'上级组织ID'; commentoncolumn Z_ORG.create_time is'创建时间'; commentoncolumn Z_ORG.org_level is'组织级别'; |
录入数据:
insertinto z_org(cid,cname,parent_id,create_time,org_level) select1,'地球',0,sysdate,1from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select2,'中国',1,sysdate,2from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select3,'上海直辖市',2,sysdate,3from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select4,'江苏省',2,sysdate,3from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select5,'南京市',4,sysdate,4from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select6,'苏州市',4,sysdate,4from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select7,'无锡市',4,sysdate,4from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select8,'虹口区',3,sysdate,4from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select9,'浙江省',2,sysdate,3from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select10,'杭州市',9,sysdate,4from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select11,'宁波市',9,sysdate,4from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select12,'美国',1,sysdate,2from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select13,'加利福尼亚州',12,sysdate,3from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select14,'旧金山市',13,sysdate,4from dual; insertinto z_org(cid,cname,parent_id,create_time,org_level) select15,'撒门市',13,sysdate,4from dual; commit; |
2、遍历根节点
1. select code1 from tablename
2. start with code2
3. connect by code3
4. where cond3
code2是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
code3是连接条件,其中用prior表示上一条记录,比如connect by prior id=parentid就是说上一条记录的id是本条记录的parent,即本记录的父亲是上一条记录。
code4是过滤条件,用于对返回的所有记录进行过滤。
prior和start with关键字是可选项:
prior运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,prior运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。start with子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
遍历表,求得某一个节点的所有上级节点记录,比如求得撒门市的上级组织,应该获得加利福尼亚州,美国,地球这些记录,如下所示:
SQL> select t.cid, t.cname, t.parent_id,level 2 from z_org t 3 startwith t.cname='撒门市' 4 connectbynocycleprior t.parent_id=t.cid 5 orderbylevelasc 6 ; CID CNAME PARENT_ID LEVEL ---------- -------------------------------- ---------- ---------- 15撒门市 13 1 13加利福尼亚州 12 2 12美国 1 3 1地球 0 4 SQL> |
遍历求得根路径字符串:
SQL> select cname_child, wm_concat(t2.cname) 2 from( 3 select'苏州市' cname_child, t.cid, t.cname, t.parent_id,level 4 from z_org t 5 startwith t.cname in('苏州市') 6 connectbynocycleprior t.parent_id=t.cid 7 )t2 groupby cname_child ; CNAME_CHILD WM_CONCAT(T2.CNAME) ----------- -------------------------------------------------------------------------------- 苏州市 苏州市,地球,中国,江苏省 SQL> |
3、遍历子节点
5. select code1 from tablename
6. start with code2
7. connect by code3
8. where cond3
code2是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
code3是连接条件,其中用prior表示上一条记录,比如connect by prior id=parentid就是说上一条记录的id是本条记录的parent,即本记录的父亲是上一条记录。
code4是过滤条件,用于对返回的所有记录进行过滤。
prior和start with关键字是可选项:
prior运算符必须放置在连接关系的两列中某一个的前面。对于节点间的父子关系,prior运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许使用列表达式。
start with子句为可选项,用来标识哪个节点作为查找树型结构的根节点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
如下所示,prior偏向父节点,就往下查询,查询节点下面所有的子节点记录:
select t1.parent_id, t1.cid, casewhenlevel=1then'*'||t1.cname whenlevel=2then'*-----'||t1.cname whenlevel=3then'*-----*-----'||t1.cname else t1.cname end , level from z_org t1 startwith t1.parent_id = 1 connectby t1.cid=prior t1.parent_id ; |
如下所示E:\u\oracle\problem\pic\52.png:
如下所示,prior偏向子节点,就往下查询,查询节点下面所有的子节点记录:
select t1.parent_id, t1.cid, casewhenlevel=1then'*'||t1.cname whenlevel=2then'*-----'||t1.cname whenlevel=3then'*-----*-----'||t1.cname else t1.cname end , level from z_org t1 startwith t1.parent_id = 1 connectbyprior t1.cid=t1.parent_id ; |
执行结果如下所示E:\u\oracle\problem\pic\51.png:
4、扩展研究
---从parentid到cid开始递归,并以parentid为主展示这条记录
select t1.parentid, t1.cid, level
from test_category t1
start with t1.parentid = 1
connect by prior t1.parentid = t1.cid
;
---从parentid到cid开始递归,并以parentid为主展示这条记录
select t1.parentid, t1.cid, level
from test_category t1
start with t1.cid = 1
connect by prior t1.parentid = t1.cid
;
---从parentid到cid开始递归,并以cid为主展示这条记录
select t1.cid, t1.parentid, level
from test_category t1
start with t1.parentid = 1
connect by t1.parentid = prior t1.cid
;
---从parentid到cid开始递归,并以cid为主展示这条记录
select t1.cid, t1.parentid, level
from test_category t1
start with t1.cid = 1
connect by t1.parentid = prior t1.cid
;
ORACLE 树形遍历查询根节点、父节点、子节点相关推荐
- js获取树形JSON数据根节点到任一子节点路径
js获取树形JSON数据根节点到任一子节点路径 数据结构,deep表示节点深度 现在定义一个方法传入一个子节点对象,返回其对应路径. 首先遍历数据将遍历顺序放在一个数组中![首先递归遍历数据将遍历顺序 ...
- 树形结构数据, 已知某一子节点 ,一次向上获取所有父节点
树形结构数据, 已知某一子节点 ,一次向上获取所有父节点 //tree: 树形结构, menuid: 已知节点属性,(代码中判断id相等) function treeFindPath(tree, me ...
- SqlServer中递归查询父节点及其所属子节点
SqlServer中递归查询父节点及其所属子节点 需求场景 SQL脚本实现-根据子节点查询所有的父节点 查询结果 SQL脚本实现-根据父节点查询所有的子节点 查询结果 需求场景 递归查询父节点及其所属 ...
- tree父节点不被选中和勾选(所以父节点)只选择子节点
tree父节点不被选中和勾选(所以父节点)只选择子节点 t = $.fn.zTree.init(t, setting, result); var zTree = $.fn.zTree.getZTree ...
- zTree中父节点禁用,子节点可以用
参考学习网址:http://www.treejs.cn/v3/main.php#_zTreeInfo zTree中父节点禁用,子节点可以用 axios.get('/base/unit/unittree ...
- zTree新增的根结点再新增子节点reAsyncChildNodes不生效解决方案
zTree新增的根结点再新增子节点reAsyncChildNodes不生效解决方案, zTree新的根结点不能异步刷新,reAsyncChildNodes不生效解决方案, reAsyncChildNo ...
- cms 移动根节点到根节点中的子节点,根节点消失解决办法
cms 移动根节点到根节点中的子节点,根节点消失解决办法 cms使用对应有个NetCMS数据库,找到其中NT_News_Class表,这个表就是保存栏目名称的表 select * from dbo.N ...
- JavaScript里的父、子节点操作源码解析
父.子节点操作.兄弟节点 1.节点概述 <!DOCTYPE html> <html lang="en"><head><meta chars ...
- jstree禁用父节点点击_Jstree选中父节点时禁用子节点也被选中
这次给大家带来Jstree选中父节点时禁用子节点也被选中,解决Jstree选中父节点时禁用子节点也被选中的注意事项有哪些,下面就是实战案例,一起来看一下. 问题描述: 最近用jstree遇到一个问题, ...
- 常用递归结构数据表,返会指点节点,跟其子节点的操作
内容来自机械工业出版的仓库管理系统设计一书 表结构{WareHouserID , ParentWarehouseID } 查询指定节点跟其子节点的信息 ALTER FUNCTION dbo.GetW ...
最新文章
- ”舍得“大法:把自己的优点当缺点倒出去
- scikit-learn kmeans++
- jndi ldap_什么是JNDI,SPI,CCI,LDAP和JCA?
- simulink和c语言开发,Simulink之嵌入式C代码生成-应用层和底层的接口
- arcgis 10.1 导入数据到oracle 发布地图服务
- python读取配置文件configparser模块
- java类功能的模块化电源_Java9模块化指南
- 显卡算力排行2020_AMD正式发布RX6000系列显卡
- IOS用正则验证手机号
- x2分布临界值表(卡方分布)
- 人工智能机器学习模型构建数据集猫狗数据集(cats_and_dogs_filtered.zip)数据集百度网盘下载地址
- Ifconfig网络配置工具详解(from fixdown.com)
- 一键开关电路设计(一)
- MATLAB多元线性拟合——03
- 使用beecloud和easychat 做微信H5 微信公众号支付遇到的坑
- 数据可视化(matplotlib库)知识点归纳总结及练习题
- windows+onlyoffice安装
- Java入门视频教程(三)4 Java基本语法------分支流程
- 前端项目中常用的轮子,提升开发效率
- YTU.2532: 投简历
热门文章
- css:电子数字显示
- thinkphp6–cms多微信管理系统源码
- 基于python的学生管理系统的设计开题报告_学生信息管理系统设计开题报告
- 碳中和数据集 1991-2020全球中国省级地级市县级市区各行业碳中和二氧化碳排放量碳封存 能源消费能源消耗能源结构数据大全
- Fortran入门教程(九)——文件
- 欧拉角科普介绍 Roll Pitch Yaw
- 公需科目2020快速学习_2021公需科目学习快捷方法
- APP通用测试用例编写
- php bing翻译的api,使用PHP和SOAP访问Bing翻译服务
- Java中的恒等于号怎么输入_Java---java基础语法03---运算符