【发布时间】:2021-09-27 02:04:18
【问题描述】:
我无法理解 SQL 中的这种递归 CTE,我可以理解大多数部分,但让我感到厌烦的领域之一是递归成员的第二个子查询。它将 EmployeeCTE 连接到 employees 表,但按照我的逻辑,到那时为止,EmployeeCTE 中只有一行。它将仅包含包含 managerID = NULL 的行。另外,我知道在它循环遍历递归成员后,它将为排名加 1,但它如何选择正确的员工以增加 1 而不是任何其他行?
USE Examples;
WITH EmployeesCTE AS
(
-- Anchor member
SELECT EmployeeID,
FirstName + ' ' + LastName As EmployeeName,
1 As Rank
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
-- Recursive member
SELECT Employees.EmployeeID,
FirstName + ' ' + LastName,
Rank + 1
FROM Employees
JOIN EmployeesCTE
ON Employees.ManagerID = EmployeesCTE.EmployeeID
)
SELECT *
FROM EmployeesCTE
ORDER BY Rank, EmployeeID;
SELECT *
FROM Employees
【问题讨论】:
标签: sql common-table-expression recursive-query correlated-subquery