MySql 8 实现递归查询父子集
背景
开发过程中遇到一个问题,需要从父级 id 查询全部子集和子集的子集,
以前的实现方式是查询全部数据在后台通过代码实现,但是这样 数据量小还可以,数据量一大,就有问题。
后来百度 mysql 的父子查询也都是存储过程,但是项目不允许使用存储过程,不利于后续维护。
最后终于发现了一篇文章有讲到 mysql 自带的函数WITH RECURSIVE实现父子集查询
ps:WITH RECURSIVE我只在 mysql8.0 以上使用过,其他版本请自行测试!
需求
找到 name 为张三的孩子和孙子,pid 为当前记录的父 id,如张三儿子的 pid 为张三的 id,以此类推。
表格数据:
| id | name | pid |
| :-- | :------- | :-- |
| 8 | 张三 | 0 |
| 9 | 李四 | 0 |
| 10 | 张三儿子 | 8 |
| 11 | 张三孙子 | 10 |
| 12 | 李四女儿 | 9 |
处理结果:
| id | name | pid |
| :-- | :------- | :-- |
| 8 | 张三 | 0 |
| 10 | 张三儿子 | 8 |
| 11 | 张三孙子 | 10 |
使用
# 计算1到100的累加的结果。
WITH RECURSIVE t(n) AS ( //t为我们结果表,n为字段,可以只指定表明不指定字段
VALUES (1) //