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 广东省/深圳市/宝安区
相关推荐
别说我什么都不会2 分钟前
【仓颉三方库】 数据库驱动——odbc4cj
数据库·harmonyos
bjzhang7512 分钟前
rqlite:一个基于SQLite构建的分布式数据库
数据库·分布式·rqlite
我转的头好晕18 分钟前
EF Core基本使用
数据库·c#·asp.net
小希与阿树25 分钟前
阿里云RAM账号免密登录Java最佳实践
java·数据库·阿里云
da-peng-song29 分钟前
ArcGIS Desktop使用入门(四)——9版本与10版本区别
数据库·arcgis·编辑器
QD.Joker1 小时前
Django ORM 单表操作
数据库·django
Linux运维老纪1 小时前
Linux之 grep、find、ls、wc 命令
linux·运维·服务器·数据库·云计算·运维开发
焱焱枫2 小时前
Oracle 19c部署之数据库软件安装(二)
数据库·oracle
一代...2 小时前
【Redis】Redis基本命令(1)
数据库·redis·缓存
八股文领域大手子2 小时前
深入浅出 Redis:核心数据结构解析与应用场景Redis 数据结构
java·数据结构·数据库·人工智能·spring boot·redis·后端