【发布时间】:2015-03-10 14:35:50
【问题描述】:
WITH CTE
AS(
SELECT ID,Name,ManagerID, 1 RecursiveCallNumber FROM Employee WHERE ID=2
UNION ALL
SELECT E.ID,E.Name,E.ManagerID,RecursiveCallNumber+1 RecursiveCallNumber FROM Employee E
INNER JOIN CTE ON E.ManagerID=CTE.ID
)
SELECT * FROM CTE
上面的代码在逻辑上是如何工作的?这是我的解释:
执行第一条选择语句。 [现在临时表是 称为 CTE]
执行下一个 select 语句并与上述结果连接。我们 加入一个减少递归步骤/循环的条件 在这种情况下是经理。 [现在整个事情被称为 CTE]
这里的基本条件是什么?如果连接中没有结果,那么它是一个基本条件吗?如果我们有第 0 条 IDN 记录形成循环引用,这不会中断吗?
https://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx 是一个很好的资源。
【问题讨论】:
-
基本条件是不涉及 CTE 的条件。那将是第一个子查询。