当前位置: 首页 > news >正文

Oracle函数6—递归查询(start with...connect by、sys_connect_by_path、level)

文章目录

    • 一、准备数据
    • 二、基本使用
    • 三、level函数
    • 四、获取完整的全树路径

一、准备数据

  • 创建表
CREATE TABLE TEST_ORG
(ID VARCHAR2(64) NOT NULL PRIMARY KEY,NAME VARCHAR2(200),PARTEN_ID VARCHAR2(64)
);
comment on column TEST_ORG.ID is '主键';
comment on column TEST_ORG.NAME is '名称';
comment on column TEST_ORG.PARTEN_ID is '父级id';
  • 插入数据
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('1', '北京市', '0');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('4', '东城区', '1');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('6', '天安门', '4');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('5', '延庆区', '1');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('7', '八达岭', '5');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('2', '天津市', '0');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('3', '上海市', '0');

二、基本使用

1、获取完整的树结构

 select * from TEST_ORG start with PARTEN_ID = 0 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id1	 北京市	  04	 东城区	  16	 天安门	  45	 延庆区	  17	 八达岭 	  52	 天津市	  03	 上海市	  0

2、获取指定节点的全部子节点(包含指定节点)

例:获取北京市的全部子级,传入id=1

 select * from TEST_ORG start with id = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id
1	北京市	0
4	东城区	1
6	天安门	4
5	延庆区	1
7	八达岭	5

提示:会返回当前数据及全部子级节点。

3、获取指定节点的全部子节点(不包含指定节点)

例:获取北京市的全部子级,传入PARTEN_ID=1

 select * from TEST_ORG start with PARTEN_ID = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id
4	东城区	1
6	天安门	4
5	延庆区	1
7	八达岭	5

提示:只会返回当前数据的全部子级节点。

4、获取指定节点的全部父节点(包含指定节点)

例:获取天安门的全部父级

  select * from TEST_ORG start with id = 6 connect by prior PARTEN_ID = id;

执行结果:

id   name   parten_id
6	天安门	4
4	东城区	1
1	北京市	0

提示:会返回当前数据以及全部父级节点。

三、level函数

level字段为oracle特有的层级字段,可以通过level字段查询指定的层级。

例:获取天安门的全部父级上层级2的一层

  select t.*,level from TEST_ORG t WHERE level = 2 start with id = 6 connect by prior PARTEN_ID = id;

执行结果:

id   name   parten_id
4	东城区	1	2

提示:只会返回当前数据以及全部父级节点的层级为2的数据。

四、获取完整的全树路径

例:获取北京市以及全部子级,指定id=1表示北京市。

 select t.*,sys_connect_by_path(name, '->') text from TEST_ORG t start with id = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id  text
1	北京市	  0	      ->北京市
4	东城区	  1	      ->北京市->东城区
6	天安门	  4	      ->北京市->东城区->天安门
5	延庆区	  1	      ->北京市->延庆区
7	八达岭	  5	      ->北京市->延庆区->八达岭

提示:结合substr函数去除指定内容。

例如:去除最开始的->符号

select t.*,substr(sys_connect_by_path(name, '->'), 3) text from TEST_ORG t start with id = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id  text
1	北京市	   0	   北京市
4	东城区	   1	   北京市->东城区
6	天安门	   4	   北京市->东城区->天安门
5	延庆区	   1	   北京市->延庆区
7	八达岭	   5	   北京市->延庆区->八达岭
http://www.lryc.cn/news/323257.html

相关文章:

  • 人机交互三原则,网络7层和对应的设备、公钥私钥
  • vue2源码学习01配置rollup打包环境
  • DP:斐波那契数列模型
  • JavaScript高级(十四)----prmise
  • 28 OpenCV 轮廓周围绘制图形
  • 校企合作,助力人才培养——黄冈师范学院-唯众 “实习实训基地”揭牌仪式顺利举行
  • npm audit fix --force
  • 递增四元组
  • 蓝桥杯每日一题——棋盘
  • QT6实现创建与操作sqlite数据库及读取实例(一)
  • 第十四届蓝桥杯JavaB组省赛真题 - 阶乘求和
  • Java毕业设计 基于springboot医院挂号系统 医院管理系统
  • 【MySQL】基本查询(1)
  • 一文讲清!进销存管理系统如何实现锁库及库存冻结?计算月加权平均成本?
  • 将本地项目上传至码云
  • 虚拟化技术
  • 鸿蒙一次开发,多端部署(一)简介
  • 数据结构——单向链表(C语言版)
  • ideaSSM 工厂效能管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目
  • Java反射机制的讲解及其示例说明
  • 20240309web前端_第二周作业_完成游戏导航栏
  • 五、大模型-Prompt
  • 【网络安全】 MSF提权
  • iPHoP:病毒宿主预测
  • 网工内推 | 数通工程师,IE认证优先,五险一金,绩效奖
  • 2024 年 AI 辅助研发趋势将更加强调智能化、自动化和个性化
  • Jackson 2.x 系列【1】概述
  • 深入理解并优化Android中的文件描述符(FD)
  • 「JS 基础」异步解决方案入门
  • 408学习笔记-16-C-动态内存管理