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
;

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

ORACLE 树形遍历查询根节点 父节点 子节点相关推荐

  1. js获取树形JSON数据根节点到任一子节点路径

    js获取树形JSON数据根节点到任一子节点路径 数据结构,deep表示节点深度 现在定义一个方法传入一个子节点对象,返回其对应路径. 首先遍历数据将遍历顺序放在一个数组中![首先递归遍历数据将遍历顺序 ...

  2. 树形结构数据, 已知某一子节点 ,一次向上获取所有父节点

    树形结构数据, 已知某一子节点 ,一次向上获取所有父节点 //tree: 树形结构, menuid: 已知节点属性,(代码中判断id相等) function treeFindPath(tree, me ...

  3. SqlServer中递归查询父节点及其所属子节点

    SqlServer中递归查询父节点及其所属子节点 需求场景 SQL脚本实现-根据子节点查询所有的父节点 查询结果 SQL脚本实现-根据父节点查询所有的子节点 查询结果 需求场景 递归查询父节点及其所属 ...

  4. tree父节点不被选中和勾选(所以父节点)只选择子节点

    tree父节点不被选中和勾选(所以父节点)只选择子节点 t = $.fn.zTree.init(t, setting, result); var zTree = $.fn.zTree.getZTree ...

  5. zTree中父节点禁用,子节点可以用

    参考学习网址:http://www.treejs.cn/v3/main.php#_zTreeInfo zTree中父节点禁用,子节点可以用 axios.get('/base/unit/unittree ...

  6. zTree新增的根结点再新增子节点reAsyncChildNodes不生效解决方案

    zTree新增的根结点再新增子节点reAsyncChildNodes不生效解决方案, zTree新的根结点不能异步刷新,reAsyncChildNodes不生效解决方案, reAsyncChildNo ...

  7. cms 移动根节点到根节点中的子节点,根节点消失解决办法

    cms 移动根节点到根节点中的子节点,根节点消失解决办法 cms使用对应有个NetCMS数据库,找到其中NT_News_Class表,这个表就是保存栏目名称的表 select * from dbo.N ...

  8. JavaScript里的父、子节点操作源码解析

    父.子节点操作.兄弟节点 1.节点概述 <!DOCTYPE html> <html lang="en"><head><meta chars ...

  9. jstree禁用父节点点击_Jstree选中父节点时禁用子节点也被选中

    这次给大家带来Jstree选中父节点时禁用子节点也被选中,解决Jstree选中父节点时禁用子节点也被选中的注意事项有哪些,下面就是实战案例,一起来看一下. 问题描述: 最近用jstree遇到一个问题, ...

  10. 常用递归结构数据表,返会指点节点,跟其子节点的操作

    内容来自机械工业出版的仓库管理系统设计一书 表结构{WareHouserID , ParentWarehouseID } 查询指定节点跟其子节点的信息 ALTER  FUNCTION dbo.GetW ...

最新文章

  1. [JVM 相关] Java 新型垃圾回收器(Garbage First,G1)
  2. 支付产品——收银台设计详解
  3. Python 通过all()判断列表(list)中所有元素是否都包含某个字符串(string)
  4. 八、Flume的构架,安装和基本使用
  5. 吃PHP小孩智力好,这7种鱼千万不能给孩子吃,会影响孩子的智力!
  6. 水彩手绘中华美食PNG素材,提高海报设计效率!
  7. 百度MP3音乐API接口及应用
  8. 微服务与虚拟化技术博客总结
  9. Cardhop for Mac(通讯录管理软件)
  10. java添加word书签,Jacob操作Word书签
  11. gif一键抠图 在线_8个免费在线抠图网站 不会PS的小白也能一键抠出专业效果图...
  12. php用代码写的三行情书,三行情书经典语录_最美的三行情书(两行泪,一段情)
  13. 各大EMM厂商功能比较 第三部分 Network Gateway比较
  14. 开发 mirai QQ机器人起步教程
  15. 持久加密USB安装kali
  16. 韩国PAYWAVE认证之技术篇
  17. C语言:输出n行由大写字母A开始构成的三角形字符阵列。
  18. Hanselman的精彩事事通讯:2014年9月5日
  19. .NET Reflector Crack,用于探索和导航反编译代码
  20. ARP代理与二层隔离技术

热门文章

  1. java quartz配置
  2. Quartz配置RMI设置-006
  3. 淘宝全屏代码天猫首页全屏代码不显示全屏怎么做设置自适应通栏990布局 全屏代码1920
  4. axure画扇形_axure实现粗略饼状图
  5. 前端实战:从零到一实现H5拼图小游戏(附源码)
  6. 华为交换机修改radius服务器地址,华为交换机radius认证-组网配置:pc+华为三层交换机+radius服务器(2003系统),求radius服务器的配置...
  7. http权威指南完整版
  8. c#: Newtonsoft.Json 高级用法二(jsonpath)
  9. 锐捷wifi魔盒自动优选服务器,锐捷校园网用python实现自动登录(需要有自己的账号)...
  10. nbu mysql_mysql数据备份之NBU