Oracle递归查询
admin
2023-05-07 01:01:16
0

                ----创建数据

1.1、建立表与插入数据

Oracle递归查询

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;

Oracle递归查询

二、start with connect by prior递归

  1. 查询所有子节点

SELECT *
FROM district
START WITH NAME ='巴中市'
CONNECT BY PRIOR ID=parent_id


Oracle递归查询

2.2、查询所有父节点

SELECT *
FROM district
START WITH NAME ='平昌县'
CONNECT BY PRIOR parent_id=ID


只需要交换 id 与parent_id的位置即可


Oracle递归查询



2.3、查询指定节点的,根节点

Oracle递归查询

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

Oracle递归查询

Oracle递归查询

2.4、查询巴中市下行政组织递归路径

 

SELECT ID,parent_id,NAME,
sys_connect_by_path(NAME,'->') namepath,LEVELFROM district 
START WITH NAME='巴中市'CONNECT BY PRIOR ID=parent_id

Oracle递归查询

三、with递归

3.1、with递归子类

 

Oracle递归查询

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;

Oracle递归查询

 

Oracle递归查询

3.2、递归父类

Oracle递归查询

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;

Oracle递归查询

Oracle递归查询

 



相关内容

热门资讯

【珠城“健”闻】市三院引进非侵... 前沿科技赋能: 构建大脑与肢体的康复通路 技术优势对比: 与传统被动康复训练相比的显著突破 1.意...
从微信状态看社交边界 钟 颐 5月11日深夜,“微信状态 访客记录”话题冲上微博热搜,引发网友热议。微信方面表示,该功能仅...
中国科学家成功研制“九章四号”... 4月10日拍摄的“九章四号”量子计算原型机局部。 记者5月13日从中国科学技术大学获悉,该校潘建伟、...
江苏睿恩新能源申请正极极片及其... 国家知识产权局信息显示,江苏睿恩新能源科技有限公司申请一项名为“一种正极极片及其制备方法、锂离子电池...
流言|2026年地球会失重7秒... 流言:2026年8月12日地球将失重7秒、数千万人因此伤亡。 (图片由AI生成) 真相:“地球重...
从渠道赋能到行业基础设施 互联... 2025年,伴随数智技术的加速渗透,保险业的获客方式、决策逻辑乃至服务形态,都在被重新定义,互联网保...
人形机器人绕不开的坎:续航问题... 这两年,关于人形机器人的故事已经被讲了很多:AGI 的终极载体、万亿美元的劳动力替代、工厂和家庭的全...
合成生命重要突破 中国团队首次... 中新网北京5月13日电 (记者 孙自法)构建能够模拟天然细胞分裂行为的人工细胞,是合成生命研究至关重...
“九章四号”问世 中国科学家再... 4月10日拍摄的“九章四号”量子计算原型机局部。新华社记者 周牧 摄 新华社合肥5月13日电(记者陈...
索尼正面回应30%平台税:要养... 快科技5月13日消息,针对长期诟病的PlayStation商店30%抽成,索尼官方近日首度正面回应称...