SQL - 递归查询子节点

news/2025/10/24 8:36:37/文章来源:https://www.cnblogs.com/zhangzhihui/p/19162048

递归查询子节点:表a中有id, parent_id两个字段,parent_id存id的上一级id。请帮我写一个SQL语句,给定一个id,递归查询出所有子id,该id为第一列,后面每有一个子id增加一列。

 

非常好,✅你的意思是:

  • 给定一个 id,递归查询出所有下级节点(所有子孙);

  • 结果可以是多行输出

  • 每一行表示从根到当前节点的一条路径;

  • 每一级节点占用一列。

例如表 a(id, parent_id) 内容如下:

idparent_id
1 NULL
2 1
3 1
4 2
5 2
6 3
7 4

结构是:

1
├─ 2
│  ├─ 4
│  │  └─ 7
│  └─ 5
└─ 3└─ 6

 


🎯 目标:给定 id = 1,希望结果是如下形式(多行,每行表示一条完整路径):

level1level2level3level4
1 2 4 7
1 2 5 NULL
1 3 6 NULL

✅ MySQL 8.0+ 实现方案

MySQL 8.0 支持 递归 CTE,我们可以利用它自顶向下展开路径。

WITH RECURSIVE cte AS (-- 初始节点SELECT id,parent_id,CAST(id AS CHAR(200)) AS path   -- 保存路径字符串FROM aWHERE id = 1   -- 起始idUNION ALL-- 递归部分:连接子节点SELECT a.id,a.parent_id,CONCAT(cte.path, ',', a.id) AS pathFROM aJOIN cte ON a.parent_id = cte.id
)
SELECT path
FROM cte
ORDER BY path;

 

结果:

path
---------
1
1,2
1,2,4
1,2,4,7
1,2,5
1,3
1,3,6

 


✅ 将路径展开为多列(用字符串拆分)

MySQL 本身不支持直接按分隔符拆分多列,但可以用 JSON 函数巧妙实现:

WITH RECURSIVE cte AS (SELECT id,parent_id,JSON_ARRAY(id) AS pathFROM aWHERE id = 1UNION ALLSELECT a.id,a.parent_id,JSON_ARRAY_APPEND(cte.path, '$', a.id)FROM aJOIN cte ON a.parent_id = cte.id
)
SELECTJSON_EXTRACT(path, '$[0]') AS level1,JSON_EXTRACT(path, '$[1]') AS level2,JSON_EXTRACT(path, '$[2]') AS level3,JSON_EXTRACT(path, '$[3]') AS level4
FROM cte
ORDER BY path;

 

结果:

level1level2level3level4
1 2 4 7
1 2 5 NULL
1 3 6 NULL

✅ 可改动点

  • 如果最大层级不确定,可以动态拼列(用 INFORMATION_SCHEMA.COLUMNS 拼 SQL 实现)。

  • 你也可以把 id = 1 换成任意起点,递归会自动找出它的所有子孙路径。


是否希望我帮你扩展成一个 动态列版本(自动检测最大深度并展开相应列) 的完整 SQL?

 
You said:
好的,谢谢。
 
ChatGPT said:

非常好 👍 那我们就来写一个 动态列版本 —— 它会自动计算最大层级,然后动态生成 SQL 输出每层一个列。


✅ 目标总结

给定表结构:

CREATE TABLE a (id INT PRIMARY KEY,parent_id INT
);

 

要求:

  • 输入一个起点 ID(例如 1);

  • 递归查询所有下级;

  • 每一行代表从起点到一个节点的完整路径;

  • 自动生成合适数量的列(level1, level2, level3, ...)。


✅ 实现方案(MySQL 8.0+)

这是一个 动态 SQL 实现。

一、示例数据

INSERT INTO a (id, parent_id) VALUES
(1, NULL),
(2, 1),
(3, 1),
(4, 2),
(5, 2),
(6, 3),
(7, 4);

 


二、动态 SQL 实现代码

-- 变量:起始ID
SET @start_id = 1;-- Step 1: 递归构建所有路径(用 JSON 数组保存)
WITH RECURSIVE cte AS (SELECT id,parent_id,JSON_ARRAY(id) AS pathFROM aWHERE id = @start_idUNION ALLSELECT a.id,a.parent_id,JSON_ARRAY_APPEND(cte.path, '$', a.id)FROM aJOIN cte ON a.parent_id = cte.id
)
SELECT * INTO TEMPORARY TABLE tmp_paths FROM cte;-- Step 2: 找出最大深度
SELECT MAX(JSON_LENGTH(path)) INTO @max_depth FROM tmp_paths;-- Step 3: 拼接动态SQL
SET @sql = 'SELECT ';
SET @i = 0;WHILE @i < @max_depth DOSET @sql = CONCAT(@sql,CASE WHEN @i > 0 THEN ', ' ELSE '' END,'JSON_UNQUOTE(JSON_EXTRACT(path, ''$[', @i, ']'')) AS level', @i + 1);SET @i = @i + 1;
END WHILE;SET @sql = CONCAT(@sql, ' FROM tmp_paths ORDER BY path;');-- Step 4: 执行生成的SQL
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

 


三、执行结果(给定 @start_id = 1

level1level2level3level4
1 2 4 7
1 2 5 NULL
1 3 6 NULL

四、说明

✅ 特点:

  • 自动检测最大深度;

  • 动态生成列数;

  • 每行表示从起始节点到某节点的一条完整路径;

  • 支持任意层级树结构。

⚠️ 注意:

  • 仅支持 MySQL 8.0+

  • 执行中创建了临时表 tmp_paths,可改名;

  • 如果路径数量很多,可在 Step 1 的 cte 结果中加上 WHERE 限制防止过大递归。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年10月色斑淡化产品对比榜:五款精华通路机制深度解析

入秋后紫外线强度虽降,但夏季累积的黑色素仍在表皮深处持续显色,不少人在10月前后首次发现色斑颜色加深或面积扩大。医美机构调研显示,每年9至11月咨询“居家淡斑”的消费者占比连续五年上升,2024年同比增长18.6%,…

2025年10月医美项目后用什么产品评测榜:术后舒缓精华口碑对比

刚做完光子、点阵或超皮秒,脸上又干又红,护肤品一抹就刺痛,这是不少医美用户的共同记忆。术后屏障暂时受损,外界刺激更容易引发色沉、反黑或持续潮红,选错护肤品等于把刚花出去的治疗费打折扣。国家药监局2024年医…

一些c语言特殊用法

C语言一些高级输出技巧与数组初始化 控制台颜色输出 完整颜色定义头文件 创建 colors.h 头文件: #ifndef COLORS_H #define COLORS_H// 重置所有属性 #define RESET "\033[0m"// 常规前景色 #define …

题解:P4204 [NOI2006] 神奇口袋

题意:口袋里有 \(t\) 种球,每种球初始有 \(a_i\) 个,每次从其中随机拿一个球并放回,同时再放入 \(d\) 个和拿出来球同种颜色的球。现在给出若干对 \((x_i,y_i)\),问同时满足第 \(x_i\) 次操作摸出来 \(y_i\) 这一…

2025年超声波检测设备厂家权威推荐榜:相控阵/高频/水浸/液冷板/钎焊超声波检测系统,技术实力与选购指南深度解析

2025年超声波检测设备厂家权威推荐榜:相控阵/高频/水浸/液冷板/钎焊超声波检测系统,技术实力与选购指南深度解析 行业背景与发展现状 超声波检测技术作为无损检测领域的重要组成部分,近年来在工业制造、航空航天、新…

2025年环氧板厂家推荐排行榜,环氧板加工,FR-4玻纤板,云母板,专业定制与优质材料供应商精选

2025年环氧板厂家推荐排行榜,环氧板加工,FR-4玻纤板,云母板,专业定制与优质材料供应商精选 随着电子电气、航空航天、轨道交通等高端制造业的快速发展,环氧板、FR-4玻纤板、云母板等高性能绝缘材料的需求持续增长…

sql server查看所有表名以及注释

下面是一个示例查询,它将返回带有序号的表名和注释: 使用 sys.tables 和 sys.extended_properties 表: SELECT ROW_NUMBER() OVER (ORDER BY t.name) AS 序号, t.name AS 表名, p.value AS 注释 FROM sys.tables AS…

SQL - 递归查询父节点

SQL - 递归查询父节点表a中有id, parent_id两个字段,parent_id存id的上一级id。请帮我写一个SQL语句,递归查询出一个id的所有parent_id,输出为一行数据多个列。 ChatGPT said:非常好的问题 👍 这是一个典型的树形…

2025.10.24——1绿

普及+/提高 P2886 [USACO07NOV] Cow Relays G 矩阵乘法优化DP/Floyd不需要啊,纯DP就能过……

2025年精密弹簧厂家权威推荐榜单:压缩弹簧、拉伸弹簧、扭转弹簧、异形弹簧专业制造商综合评测与选购指南

2025年精密弹簧厂家权威推荐榜单:压缩弹簧、拉伸弹簧、扭转弹簧、异形弹簧专业制造商综合评测与选购指南 在工业制造领域,精密弹簧作为关键功能部件,其质量直接影响整个设备系统的性能稳定性和使用寿命。随着产业升…

PyQuokka框架存在Pickle反序列化远程代码执行漏洞

本文详细分析了PyQuokka框架中FlightServer类的安全漏洞,攻击者可通过恶意Pickle反序列化实现远程代码执行,影响版本<=0.3.1,CVSS评分9.8分属于严重级别。PyQuokka框架远程代码执行漏洞分析 漏洞概述 在PyQuokka…

2025年磨粉机厂家推荐排行榜,雷蒙磨粉机,环辊磨粉机,摆式磨粉机,矿石磨粉机,超细磨粉机,高压磨粉机,大型磨粉机公司推荐

2025年磨粉机厂家推荐排行榜:专业解析雷蒙磨粉机与环辊磨粉机技术趋势 行业背景与发展现状 磨粉设备作为工业生产中不可或缺的关键设备,其技术发展与产业升级紧密相连。从传统的雷蒙磨粉机到现代的超细磨粉机,磨粉技…

SQL Server 建表语句

当然可以!下面是你提供的完整 SQL 脚本,逐行添加了详细中文注释,特别适合刚学习 SQL Server 的你理解每一句的作用。-- 切换当前数据库上下文为 ProConfigDB(后续所有操作都在这个数据库中进行) use ProConfigDB …

2025年润滑油厂家权威推荐榜:工业润滑油,汽车润滑油,发动机润滑油,甲醇发动机润滑油,三特/三球/安迪森润滑油,全合成润滑油,中国润滑油,长效发动机润滑油厂家精选

2025年润滑油厂家权威推荐榜:工业润滑油,汽车润滑油,发动机润滑油,甲醇发动机润滑油,三特/三球/安迪森润滑油,全合成润滑油,中国润滑油,长效发动机润滑油厂家精选 行业背景与发展趋势 随着中国制造业的持续升级…

SQL Server 报错引用了无效的表`表名`

写的有问题 ,把下面那个drop table Projects改成 drop table Equipments 就好了

2025年氢氧化镁厂家权威推荐榜:矿石氢氧化镁/水镁石氢氧化镁/阻燃剂氢氧化镁/改性氢氧化镁源头企业综合评测与采购指南

2025年氢氧化镁厂家权威推荐榜:矿石氢氧化镁/水镁石氢氧化镁/阻燃剂氢氧化镁/改性氢氧化镁源头企业综合评测与采购指南 氢氧化镁作为一种重要的无机化工原料,在阻燃材料、环保处理、医药制备等领域发挥着不可替代的作…

Nexpose 8.25.0 for Linux Windows - 漏洞扫描

Nexpose 8.25.0 for Linux & Windows - 漏洞扫描Nexpose 8.25.0 for Linux & Windows - 漏洞扫描 Rapid7 on-prem Vulnerability Management, released Oct 22, 2025 请访问原文链接:https://sysin.org/blog/…

NVIDIA —— 智能仓储

NVIDIA —— 智能仓储相关: https://www.nvidia.com/en-us/ai-data-science/ai-workflows/multi-camera-tracking/ https://zhuanlan.zhihu.com/p/35391826MTMC技术相关 ‌计算机视觉领域‌:NVIDIA提出的多相机多目标…

工作出行计划 —— 15号出发去石家庄,参加17号的会展 —— 2025中国国际数字经济博览会10月17日至19日在石家庄举行

工作出行计划 —— 15号出发去石家庄,参加17号的会展 —— 2025中国国际数字经济博览会10月17日至19日在石家庄举行相关: https://www.hebei.gov.cn/columns/580d0301-2e0b-4152-9dd1-7d7f4e0f4980/202509/18/9c2409…

人工智能学院课程设计

人工智能学院课程设计本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,如有侵权请与博主联系。 如果未特殊标注…