我不明白为什么递归成员调用cte时不调用锚。
为什么它要去递归部分中的最新记录(?)?
WITH Managers AS
(
--initialization
SELECT EmployeeID, LastName, ReportsTo
FROM Employees
WHERE ReportsTo IS NULL
UNION ALL
--recursive execution
SELECT e.employeeID,e.LastName, e.ReportsTo
FROM Employees e INNER JOIN Managers m
ON e.ReportsTo = m.employeeID
)
SELECT * FROM Managers
答案 0 :(得分:1)
这是著名的Microsoft示例数据库if type(txt) is str:
for i in txt:
if i.isalpha() == False:
txt = txt.replace(i," ")
(自1997年以来不变)。 Northwind
表演示了分层数据和递归CTE(1997年不可用)访问它的用法。
为了更好地理解/测试/培训目的,请增加一列
Emploeees
这是结果集。
WITH Managers AS
(
--initialization
SELECT EmployeeID, LastName, ReportsTo, /*extra column*/ 0 [level]
FROM Employees
WHERE ReportsTo IS NULL
UNION ALL
--recursive execution
SELECT e.employeeID,e.LastName, e.ReportsTo, [level]+1
FROM Employees e
INNER JOIN Managers m ON e.ReportsTo = m.employeeID
)
SELECT * FROM Managers
因此 anchor 始终执行,递归部分执行 iff 锚返回行。