sqlserver递归查询,给个例子
时间: 2024-09-28 11:16:05 浏览: 53
SQL Server中的递归查询,也称为层级查询或分治查询,主要用于处理那些需要遍历树形结构或层级数据的问题,例如组织架构、文件系统路径等。递归查询会在当前行的基础上加入自身结果,直到达到某个终止条件。下面是一个简单的例子:
假设我们有一个员工表`Employees`,包含了员工ID,直接上级ID,和员工姓名信息。我们可以用递归查询找出所有直接或间接的下属员工:
```sql
WITH RECURSIVE EmployeeHierarchy (EmployeeID, ManagerName, Level)
AS
(
SELECT EmployeeID, Name AS ManagerName, 1 AS Level
FROM Employees
WHERE DirectManagerID IS NULL -- 基准情况,顶层经理
UNION ALL
SELECT e.EmployeeID, eh.ManagerName + ' > ' + e.Name, eh.Level + 1
FROM Employees e
JOIN EmployeeHierarchy eh ON e.DirectManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy;
```
在这个例子中,`WITH RECURSIVE`关键字开启了一个递归查询,首先选择没有直属经理的员工作为基础(`Level=1`),然后通过`UNION ALL`连接下一层的员工,每层增加一级(`Level+1`)。递归将在找到所有直接或间接下属后停止。
阅读全文