Oracle递归查询层级及路径

一、建表及插入数据

ocation_id location_name parent_location_id
1 广东省 NULL
2 广州市 1
3 深圳市 1
4 天河区 2
5 番禺区 2
6 南山区 3
7 宝安区 3

建表sql:

sql 复制代码
CREATE TABLE locations (
    location_id NUMBER PRIMARY KEY,
    location_name VARCHAR2(100),
    parent_location_id NUMBER
);
INSERT INTO locations (location_id, location_name, parent_location_id)
VALUES (1, '广东省', NULL);

INSERT INTO locations (location_id, location_name, parent_location_id)
VALUES (2, '广州市', 1);

INSERT INTO locations (location_id, location_name, parent_location_id)
VALUES (3, '深圳市', 1);

INSERT INTO locations (location_id, location_name, parent_location_id)
VALUES (4, '天河区', 2);

INSERT INTO locations (location_id, location_name, parent_location_id)
VALUES (5, '番禺区', 2);

INSERT INTO locations (location_id, location_name, parent_location_id)
VALUES (6, '南山区', 3);

INSERT INTO locations (location_id, location_name, parent_location_id)
VALUES (7, '宝安区', 3);

二、展现出省市县之间的层级结构

sql:

sql 复制代码
SELECT location_id, location_name, LEVEL
FROM locations
CONNECT BY PRIOR location_id = parent_location_id
START WITH parent_location_id IS NULL;

结果:

location_id location_name LEVEL
1 广东省 1
2 广州市 2
4 天河区 3
5 番禺区 3
3 深圳市 2
6 南山区 3
7 宝安区 3

三、每个区域在层级结构中的完整路径

sql:

sql 复制代码
SELECT location_id, 
       location_name, 
       LEVEL, 
       SYS_CONNECT_BY_PATH(location_name,'/') AS path
FROM locations
CONNECT BY PRIOR location_id = parent_location_id
START WITH parent_location_id IS NULL;

结果:

location_id location_name LEVEL path
1 广东省 1 广东省
2 广州市 2 广东省/广州市
4 天河区 3 广东省/广州市/天河区
5 番禺区 3 广东省/广州市/番禺区
3 深圳市 2 广东省/深圳市
6 南山区 3 广东省/深圳市/南山区
7 宝安区 3 广东省/深圳市/宝安区
相关推荐
做运维的阿瑞6 分钟前
mysql数据库视图笔记:创建、修改、删除与适用场景
数据库·笔记·mysql
Seraphina3615 分钟前
DVWA(SQL Injection-High,XSS Reflected-Medium,XSS Stored-Medium)
数据库·经验分享·sql·网络安全·xss
@Mike@16 分钟前
12-数据库学习笔记(五种连接算法)
数据库·笔记·学习
Omics Pro28 分钟前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
龙亘川33 分钟前
探索智慧文化服务:建设初衷、整体架构、技术支撑、发展现状与实践影响
大数据·数据库·架构
风早爽太37 分钟前
Python 学习笔记:数据库迁移工具 ‌Alembic
数据库·python·fastapi·alembic
java1234_小锋1 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据库基本操作
数据库·mysql
其实防守也摸鱼1 小时前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
android·数据库·学习·ai·oracle·自动化
jason.zeng@15022072 小时前
canal做mysql的异步传输工具
数据库·mysql·linq
Ivanqhz2 小时前
BURG(自底向上重写生成器)
服务器·数据库·人工智能·深度学习·算法