WITH RECURSIVE department_hierarchy AS (
-- 基础查询,选择顶级部门
SELECT id, name, parent_id, 1 AS level
FROM departments
WHERE parent_id IS NULL
UNION ALL
-- 递归部分,连接自身以获取子部门
SELECT d.id, d.name, d.parent_id, dh.level + 1
FROM departments d
INNER JOIN department_hierarchy dh ON d.parent_id = dh.id
)
-- 查询结果,展示部门层级结构
SELECT * FROM department_hierarchy;
WITH RECURSIVE: 这是 MySQL 中用于定义公共表表达式 (CTE) 的关键字。RECURSIVE
关键字允许 CTE 进行递归查询。
department_hierarchy: 这是我们定义的 CTE 名称,它将包含部门的层级结构。
基础查询: 第一部分是从 departments
表中选择所有顶级部门(即 parent_id
为 NULL
的记录),并为这些记录设置层级为 1。
递归部分: 使用 UNION ALL
将递归查询的结果与基础查询的结果合并。递归部分通过自连接的方式,从上一级部门 (dh
) 查找其子部门 (d
),并将层级加 1。
最终查询: 最后,我们从 department_hierarchy
CTE 中选择所有记录,展示完整的部门层级结构。
这个例子展示了如何使用递归查询来构建一个部门的层级结构。
上一篇:mysql distinct用法
下一篇:mysql 查看版本
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站