写个递归查询的例子,sqlserver
时间: 2024-09-29 22:09:41 浏览: 41
在SQL Server中,假设我们有这样一个简单的“Employees”表,存储了员工信息和他们的上级经理ID:
```sql
CREATE TABLE Employees (
EmployeeID int,
ManagerID int,
Name varchar(50)
);
```
如果我们想要获取某个员工(比如EmployeeID为1)以及其所有的直属和间接上级,我们可以使用递归查询。这里以查找ManagerID=1的员工的完整路径为例:
```sql
WITH RecursiveEmployees (EmployeeID, Level, Path) AS
(
SELECT E.EmployeeID, 1, CAST(E.Name + ' (Level 1)' as VARCHAR(MAX))
FROM Employees E
WHERE E.EmployeeID = 1
UNION ALL
SELECT E.EmployeeID, D.Level + 1, D.Path + ' -> ' + E.Name + ' (Level ' + CAST(D.Level + 2 as VARCHAR) + ')'
FROM Employees E
INNER JOIN RecursiveEmployees D ON E.ManagerID = D.EmployeeID
)
SELECT * FROM RecursiveEmployees;
```
这个查询首先找出ManagerID为1的员工(基础条件),然后通过递归加入每一层的上级(递归规则)。Level列表示层级,Path列则记录了完整的路径。
阅读全文