SQL 递归查询:如何根据部门 ID 获取所有上级部门
假设部门表名为 'dept',部门 ID 为 'dept_id',上级部门 ID 为 'parent_id',可以使用递归查询实现:
WITH RECURSIVE dept_tree AS (
SELECT dept_id, parent_id
FROM dept
WHERE dept_id = [所在部门id]
UNION ALL
SELECT d.dept_id, d.parent_id
FROM dept_tree dt
JOIN dept d ON dt.parent_id = d.dept_id
)
SELECT dept_id
FROM dept_tree;
解释:
- 使用
WITH RECURSIVE关键字声明一个名为 'dept_tree' 的递归查询,该查询包含两个子查询。 - 第一个子查询查询所在部门的 'dept_id' 和 'parent_id',作为递归查询的起点。
- 第二个子查询查询 'dept_tree' 的 'parent_id' 所对应的上级部门的 'dept_id',直到 'parent_id' 为空,即到达了最高级部门。
- 最终查询从 'dept_tree' 中选取 'dept_id' 作为查询结果。
原文地址: https://www.cveoy.top/t/topic/nAms 著作权归作者所有。请勿转载和采集!