sqlserver 递归查询
时间: 2023-10-08 15:09:04 浏览: 96
SqlServer实现递归查询
SQL Server 中的递归查询可以使用 Common Table Expression (CTE) 来实现。具体步骤如下:
1. 定义一个 CTE,包含初始查询的结果集。
2. 在 CTE 中定义一个递归查询,使用 UNION ALL 连接初始结果集和递归查询的结果集。
3. 在递归查询中,使用 UNION ALL 连接 CTE 自身,直到满足终止条件停止递归查询。
下面是一个简单的例子,假设有一个员工表 Employee,其中包含员工的 ID、姓名和上级ID,我们希望查询每个员工的上级链:
```
WITH EmployeeCTE AS (
-- 初始结果集
SELECT ID, Name, SupervisorID, CAST(Name AS VARCHAR(MAX)) AS SupervisorChain
FROM Employee
WHERE SupervisorID IS NULL -- 终止条件
UNION ALL
-- 递归查询
SELECT e.ID, e.Name, e.SupervisorID, CAST(ec.SupervisorChain + ' > ' + e.Name AS VARCHAR(MAX)) AS SupervisorChain
FROM Employee e
INNER JOIN EmployeeCTE ec ON e.SupervisorID = ec.ID -- 连接 CTE 自身
)
SELECT ID, Name, SupervisorChain
FROM EmployeeCTE
ORDER BY SupervisorChain;
```
这个查询会输出每个员工的 ID、姓名和上级链,按照上级链的顺序排序。注意,在 CTE 中定义的第一个 SELECT 语句包含终止条件,这是递归查询的停止条件。在第二个 SELECT 语句中,使用 INNER JOIN 连接 CTE 自身,并且将 SupervisorChain 拼接成一个字符串,形成上级链。
阅读全文