[英]SQL: execution model for recursive CTEs
我试图了解递归 CTE 的执行方式,尤其是导致它们终止的原因。 这是一个简单的例子:
WITH cte_increment(n) AS (
SELECT -- Select 1
0
UNION ALL -- Union
SELECT -- Select 2
n + 1
FROM -- From
cte_increment
WHERE -- Where
n < 6
)
SELECT
*
FROM
cte_increment
;
我目前的心理 model 是,在调用表达式时,子句应该按以下顺序执行:
但是,我认为这不会发生,因为 From 子句递归地调用相同的表达式,这将重新启动相同的进程更深一层。 这将导致无限递归,只有在达到递归限制时才会停止。
我的问题是,CTE 如何检查其终止条件?
在此先感谢您的帮助!
所以,“递归”在这里有点用词不当。 它实际上是迭代的,从锚点条件开始。 在数学意义上,也许更准确的术语是“归纳”。
每次迭代只使用前一次迭代中的行。 它不使用 CTE 中的所有行。
因此,第一次迭代生成:
0
第二个只看到 1 并生成
1
第三个只看到 2 并生成
2
依此类推,直到你到达where
条件说“不再”的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.