繁体   English   中英

SQL:执行 model 用于递归 CTE

[英]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 是,在调用表达式时,子句应该按以下顺序执行:

  1. Select 1
  2. 在哪里
  3. Select 2
  4. 联盟

但是,我认为这不会发生,因为 From 子句递归地调用相同的表达式,这将重新启动相同的进程更深一层。 这将导致无限递归,只有在达到递归限制时才会停止。

我的问题是,CTE 如何检查其终止条件?

在此先感谢您的帮助!

所以,“递归”在这里有点用词不当。 它实际上是迭代的,从锚点条件开始。 在数学意义上,也许更准确的术语是“归纳”。

每次迭代只使用前一次迭代中的行。 它不使用 CTE 中的所有行。

因此,第一次迭代生成:

0

第二个只看到 1 并生成

1

第三个只看到 2 并生成

2

依此类推,直到你到达where条件说“不再”的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM