Oracle递归查询
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,----创建数据1.1、建立表与插入数据CREATE TABLE DISTRICT( ID NUMBER(10) NOT NULL, PARENT
千家信息网最后更新 2025年11月08日Oracle递归查询
----创建数据
1.1、建立表与插入数据
CREATE TABLE DISTRICT( ID NUMBER(10) NOT NULL, PARENT_ID NUMBER(10), NAME VARCHAR2(255 BYTE) NOT NULL);ALTER TABLE DISTRICT ADD ( CONSTRAINT DISTRICT_PK PRIMARY KEY (ID));ALTER TABLE DISTRICT ADD ( CONSTRAINT DISTRICT_R01 FOREIGN KEY (PARENT_ID) REFERENCES DISTRICT (ID)); insert into DISTRICT (id, parent_id, name)values (1, null, '四川省');insert into DISTRICT (id, parent_id, name)values (2, 1, '巴中市');insert into DISTRICT (id, parent_id, name)values (3, 1, '达州市');insert into DISTRICT (id, parent_id, name)values (4, 2, '巴州区');insert into DISTRICT (id, parent_id, name)values (5, 2, '通江县');insert into DISTRICT (id, parent_id, name)values (6, 2, '平昌县');insert into DISTRICT (id, parent_id, name)values (7, 3, '通川区');insert into DISTRICT (id, parent_id, name)values (8, 3, '宣汉县');insert into DISTRICT (id, parent_id, name)values (9, 8, '塔河乡');insert into DISTRICT (id, parent_id, name)values (10, 8, '三河乡');insert into DISTRICT (id, parent_id, name)values (11, 8, '胡家镇');insert into DISTRICT (id, parent_id, name)values (12, 8, '南坝镇');insert into DISTRICT (id, parent_id, name)values (13, 6, '大寨乡');insert into DISTRICT (id, parent_id, name)values (14, 6, '响滩镇');insert into DISTRICT (id, parent_id, name)values (15, 6, '龙岗镇');insert into DISTRICT (id, parent_id, name)values (16, 6, '白衣镇');commit;
二、start with connect by prior递归
查询所有子节点
SELECT *
FROM district
START WITH NAME ='巴中市'
CONNECT BY PRIOR ID=parent_id
2.2、查询所有父节点
SELECT *
FROM district
START WITH NAME ='平昌县'
CONNECT BY PRIOR parent_id=ID
只需要交换 id 与parent_id的位置即可
2.3、查询指定节点的,根节点
SELECT d.*,connect_by_root(d.id),connect_by_root(NAME)FROM district dWHERE NAME='平昌县'START WITH d.parent_id=1 --d.parent_id is null 结果为四川省CONNECT BY PRIOR d.ID=d.parent_id
2.4、查询巴中市下行政组织递归路径
SELECT ID,parent_id,NAME,sys_connect_by_path(NAME,'->') namepath,LEVELFROM district START WITH NAME='巴中市'CONNECT BY PRIOR ID=parent_id
三、with递归
3.1、with递归子类
WITH t (ID ,parent_id,NAME) --要有列名AS(SELECT ID ,parent_id,NAME FROM district WHERE NAME='巴中市'UNION ALLSELECT d.ID ,d.parent_id,d.NAME FROM t,district d --要指定表和列表,WHERE t.id=d.parent_id)SELECT * FROM t;
3.2、递归父类
WITH t (ID ,parent_id,NAME) --要有表AS(SELECT ID ,parent_id,NAME FROM district WHERE NAME='通江县'UNION ALLSELECT d.ID ,d.parent_id,d.NAME FROM t,district d --要指定表和列表,WHERE t.parent_id=d.id)SELECT * FROM t;
递归
巴中
巴中市
查询
节点
平昌
平昌县
数据
通江
四川
四川省
通江县
位置
大寨
子类
白衣
结果
路径
宣汉
通川
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
群晖服务器怎么连接电脑
云顶之弈手游怎么看自己服务器
gta5合约数据库
业务服务器文件包选多大
平原互联网科技
甘肃幻想世界网络技术有限公司
软件开发员怎么配置
数据库三个约束完整性有效性
服务器一直掉线
如何建立网络安全框架体系
什么是共建网络安全共享网络文明
我的世界怎么用服务器玩躲猫猫
两台电脑和数据库实现通信
网络安全手报简单
登录华为账号说无法连接服务器
网络安全事故演练总结
贵州服务器硬盘报价
游戏软件开发培训哪家强
数据库自动备份是自动覆盖吗
mysql数据库简历
北京溜溜吧网络技术有限公司
go提取数据库数据
物联网的软件开发用什么
记录软件开发知识库的软件
神奇宝贝服务器刷新率
阳光守护为什么连接不上服务器
网页登录sql数据库
常见的蜂窝网络技术
网络安全课护苗
软件开发生命周期说明与实例