MySQL 递归查询:获取指定部门的所有下级部门
MySQL 中可以使用 WITH RECURSIVE 关键字来进行递归查询。以下是一个示例,假设有一个部门表 dept,包含 id、name 和 parent_id 三个字段,其中 parent_id 表示上级部门的 id。需要查询出某个部门(例如部门 id 为 1)的所有下级部门(包括所有子孙级别的部门),并按照层级关系进行排序。
WITH RECURSIVE cte (id, name, parent_id, level) AS (
SELECT id, name, parent_id, 0
FROM dept
WHERE id = 1 -- 起始部门 id
UNION ALL
SELECT d.id, d.name, d.parent_id, cte.level + 1
FROM dept d
JOIN cte ON d.parent_id = cte.id
)
SELECT id, name, parent_id, level
FROM cte
ORDER BY level, id;
解析:
WITH RECURSIVE cte:定义一个递归查询的临时表cte,包含id、name、parent_id和level四个字段。SELECT id, name, parent_id, 0:起始部门的查询,level设为 0。UNION ALL:将查询结果与下一层级的部门进行连接。JOIN cte ON d.parent_id = cte.id:使用 JOIN 连接cte表,查询下一层级的部门。SELECT d.id, d.name, d.parent_id, cte.level + 1:将下一层级的部门加入cte表,并将level设为上一层级的level加 1。ORDER BY level, id:按照level和id进行排序,以展示部门的层级关系。
执行以上 SQL 语句,即可查询出指定部门的所有下级部门。
原文地址: https://www.cveoy.top/t/topic/n4QH 著作权归作者所有。请勿转载和采集!