递归CTE(Common Table Expression)是指在SQL查询中使用递归方法来生成结果集。下面是一个使用递归CTE的简单示例,假设有以下一个表(employee):
employee_id | employee_name | manager_id
----------------------------------------
1 | John | NULL
2 | Mike | 1
3 | Sarah | 2
4 | Alice | 2
5 | Tom | 1
我们的目标是按照员工的层级关系来展示员工的姓名。下面是使用递归CTE实现此目标的代码示例:
WITH RECURSIVE employee_hierarchy AS (
SELECT employee_id, employee_name, 0 AS level
FROM employee
WHERE manager_id IS NULL
UNION ALL
SELECT e.employee_id, e.employee_name, eh.level + 1
FROM employee e
INNER JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id
)
SELECT employee_name, level
FROM employee_hierarchy
ORDER BY level, employee_id;
上述代码中,我们首先定义了一个递归CTE(employee_hierarchy),在递归部分使用了UNION ALL来连接两个查询。第一个查询是起始条件,找出顶级经理(manager_id为NULL的员工),并设置初始层级为0。第二个查询使用INNER JOIN将子级员工与上级员工关联起来,并将层级递增1。
最后,我们在主查询中选择了员工的姓名和层级,并按照层级和员工ID进行排序。执行以上代码,将会得到以下结果:
employee_name | level
---------------------
John | 0
Mike | 1
Tom | 1
Sarah | 2
Alice | 2
这样就实现了按照员工的层级关系展示员工姓名的功能。