sql server 递归查询样例
时间: 2023-09-02 16:08:13 浏览: 167
SQL Server 公用表表达式(CTE)实现递归的方法
当你需要处理层级关系的数据时,递归查询是 SQL Server 中非常有用的功能。下面是一个递归查询的示例,以帮助你更好地理解如何使用递归查询。
假设我们有一个 Employee 表,其中包含员工的 ID、姓名和上级的 ID。我们想要查询每个员工及其所有下属的信息。
首先,创建一个示例表 Employee 并插入一些数据:
```sql
CREATE TABLE Employee (
ID INT,
Name VARCHAR(50),
ManagerID INT
);
INSERT INTO Employee (ID, Name, ManagerID)
VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Charlie', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);
```
然后,使用递归查询来获取每个员工及其所有下属的信息:
```sql
WITH RecursiveCTE AS (
SELECT ID, Name, ManagerID, 0 AS Level
FROM Employee
WHERE ManagerID IS NULL
UNION ALL
SELECT e.ID, e.Name, e.ManagerID, rc.Level + 1
FROM Employee e
INNER JOIN RecursiveCTE rc ON e.ManagerID = rc.ID
)
SELECT ID, Name, Level
FROM RecursiveCTE;
```
在上面的示例中,我们使用了一个递归公共表表达式(CTE)来实现递归查询。递归CTE分为两个部分:
1. Anchor(基础查询):在这个示例中,我们首先选择顶级员工,即 ManagerID 为 NULL 的员工。
2. Recursive(递归查询):我们将 Employee 表与递归CTE进行连接,并通过 ManagerID 与上一级的员工进行关联。这样可以逐级获取下属的信息。
最后,我们从递归CTE中选择 ID、Name 和 Level 列来显示每个员工及其所在的层级。
希望这个示例能够帮助你理解 SQL Server 中递归查询的用法。如果有任何进一步的问题,请随时提问。
阅读全文