写一个SQL语句中的递归
时间: 2024-01-21 19:17:37 浏览: 23
在SQL Server中,可以使用递归CTE(公共表达式)来实现递归查询。
例如,假设有一个表格包含员工的上下级关系,我们可以使用递归CTE查询某个员工的所有下属:
```
WITH EmployeeHierarchy AS (
SELECT EmployeeID, ManagerID, EmployeeName
FROM Employees
WHERE EmployeeID = @EmployeeID -- 假设查询某个员工的下属
UNION ALL
SELECT e.EmployeeID, e.ManagerID, e.EmployeeName
FROM Employees e
JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
)
SELECT EmployeeID, ManagerID, EmployeeName
FROM EmployeeHierarchy
```
在上述查询中,我们使用了递归CTE来定义名为EmployeeHierarchy的公共表达式,该表达式包括两个SELECT语句:
- 第一个SELECT语句用于查询指定员工的基本信息,并将其作为递归CTE的起始记录。
- 第二个SELECT语句使用JOIN将下属员工与其直接上级员工的信息连接起来,并将它们添加到递归CTE中。
由于第二个SELECT语句中引用了EmployeeHierarchy,因此这个CTE是递归的。查询会一直重复执行第二个SELECT语句,直到没有新的下属员工加入到递归CTE中为止。最终结果是包含指定员工的所有下属的记录集合。