MySQL 中可以使用 WITH RECURSIVE 关键字来进行递归查询。以下是一个示例,假设有一个部门表 dept,包含 idnameparent_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,包含 idnameparent_idlevel 四个字段。
  • 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:按照 levelid 进行排序,以展示部门的层级关系。

执行以上 SQL 语句,即可查询出指定部门的所有下级部门。

MySQL 递归查询:获取指定部门的所有下级部门

原文地址: https://www.cveoy.top/t/topic/n4QH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录