用递归CTE可一次性自下而上查出子记录的完整祖先路径;锚点查子节点,递归JOIN回表按parent_id向上追溯,配合level计数与字符串拼接生成可读路径,需索引parent_id并限制递归深度以防性能问题。

想从子记录快速找到它的父级、祖父级甚至更上层的祖先?SQL反向关联查询就是干这个的——不靠多次JOIN,也不手动写N层嵌套,而是用递归CTE(Common Table Expression)一次性查出完整路径。
核心是定义一个锚点(子节点)+ 递归成员(向上找parent_id),数据库会自动迭代直到找不到父级为止。适用于有明确父子关系字段(如id和parent_id)的表,比如部门、分类、评论回复链。
不只是ID,还要看“部门A → 部门B → 总部”这样的可读路径?在递归CTE里用字符串拼接+层级计数即可:
MySQL不用WITH RECURSIVE开头,但逻辑一致。注意初始查询必须是“单表无JOIN”,且递归查询中只能引用CTE本身一次:
反向查祖先看似简单,数据量大时容易慢:
基本上就这些。反向关联不是魔法,关键是把“子→父”的跳跃方向想清楚,再让数据库替你重复跑。用对了,一条SQL顶十次应用层循环。
以上就是SQL反向关联查询技巧_SQL从子结构查父级实例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号