mysql递归查询父子_MySql 8 实现递归查询父子集

本文介绍了如何在MySQL 8中使用WITH RECURSIVE函数来实现递归查询父子集合,以解决数据量大时后台代码处理效率低的问题。通过示例展示了从父节点查找所有子孙节点以及从子节点查找所有祖先节点的方法。
摘要由CSDN通过智能技术生成

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) //

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值