首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:递归CTE的执行模型

SQL:递归CTE的执行模型
EN

Stack Overflow用户
提问于 2020-12-11 20:12:18
回答 1查看 41关注 0票数 2

我试图了解递归CTE是如何执行的,特别是是什么原因导致它们终止。下面是一个简单的例子:

代码语言:javascript
复制
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
;

我目前的思维模式是,在调用表达式时,应按照以下顺序执行子句:

1

  • From

  • Where

  • Select 2

  • Union

  1. Select

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

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

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-11 20:15:38

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

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

因此,第一次迭代生成:

代码语言:javascript
复制
0

第二个只看到1并生成

代码语言:javascript
复制
1

第三个只看到2并生成

代码语言:javascript
复制
2

等等,直到你到达where条件说“不再”的地方。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65257987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档