MySQL 递归查询:轻松检索部门层级数据
在处理层级数据时,递归查询是一种强大的工具。本文将通过一个简单示例,教你如何使用 MySQL 的递归查询功能,查询一个顶级部门及其所有子部门的信息。
一、背景
假设你有一个公司部门表tb_depart
,表结构如下:
• id
:部门唯一标识。
• depart_name
:部门名称。
• pid
:父部门的id
,顶级部门的pid
为null
。
二、递归查询的实现
MySQL 8.0 及以上版本支持递归查询,通过WITH RECURSIVE
语法实现。以下是实现代码:
WITH RECURSIVE depart AS (-- 递归的初始部分:找到顶级部门SELECT * FROM tb_depart WHERE pid IS NULL AND depart_name = 'xx网络科技有限公司'UNION ALL-- 递归的部分:找到子部门SELECT d.*FROM tb_depart dINNER JOIN depart p ON d.pid = p.id
)
SELECT * FROM depart;
代码解析
• 初始部分:
• SELECT * FROM tb_depart WHERE pid IS NULL AND depart_name = 'xx网络科技有限公司'
:找到顶级部门“xx网络科技有限公司”。
• 递归部分:
• SELECT d.* FROM tb_depart d INNER JOIN depart p ON d.pid = p.id
:通过INNER JOIN
将当前层级的部门与上一层级的部门关联起来,找到所有子部门。
• UNION ALL
:将初始部分和递归部分的结果合并。
• 最终查询:
• SELECT * FROM depart
:从递归查询的结果集中获取最终结果。
三、运行结果
假设表中有以下数据:
id depart_name pid
1 xx网络科技有限公司 NULL
2 技术部 1
3 运营部 1
4 前端组 2
5 后端组 2
运行上述查询后,结果如下:
id depart_name pid
1 xx网络科技有限公司 NULL
2 技术部 1
3 运营部 1
4 前端组 2
5 后端组 2
四、总结
通过递归查询,我们可以轻松地检索出一个顶级部门及其所有子部门的层级结构。这种方法适用于任何层级数据的查询,不仅限于部门表。希望本文能帮助你更好地理解和使用 MySQL 的递归查询功能。