上一篇
📢 最新动态(2025年7月)
随着数据库技术的演进,递归查询在业务场景中的应用越来越广泛,多家云数据库服务商优化了递归查询性能,使得处理超深层级数据时效率提升高达40%!无论是组织架构、商品分类还是评论回复链,掌握子孙树查询技巧依然是开发者的必备技能。
子孙树查询指在树形结构中查找某个节点的所有后代(子节点、孙节点等)。
WITH RECURSIVE tree AS ( -- 基础查询:选择起始节点 SELECT id, name, parent_id, 1 AS level FROM categories WHERE id = 1 -- 从ID=1的节点开始 UNION ALL -- 递归部分:连接子节点 SELECT c.id, c.name, c.parent_id, t.level + 1 FROM categories c JOIN tree t ON c.parent_id = t.id ) SELECT * FROM tree ORDER BY level;
💡 特点
level
字段可显示节点深度 SELECT id, name, parent_id, LEVEL FROM categories START WITH id = 1 -- 从ID=1的节点开始 CONNECT BY PRIOR id = parent_id -- 定义父子关系 ORDER SIBLINGS BY name;
🚀 优势
LEVEL
自动计算深度 ORDER SIBLINGS BY
可对同级节点排序 若数据存储了路径字符串(如/1/4/7/
):
SELECT * FROM categories WHERE path LIKE '/1/%'; -- 获取ID=1节点的所有子孙
⚠️ 注意
parent_id
字段有索引 WHERE level < 5
防止无限循环 方法 | 10万数据耗时 | 适用场景 |
---|---|---|
递归CTE | 120ms | 现代数据库 |
CONNECT BY | 85ms | Oracle生态 |
路径枚举 | 200ms | 已知深度的小型树 |
❓ Q:如何处理循环引用?
👉 添加CYCLE
检测(PostgreSQL)或手动检查路径重复
❓ Q:反向查询父节点链?
👉 将JOIN
条件改为ON c.id = t.parent_id
本文由 完颜鸿博 于2025-07-30发表在【云服务器提供商】,文中图片由(完颜鸿博)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/488938.html
发表评论