递归SQL查询如何终止以及如何计算它们?

递归SQL查询如何终止以及如何计算它们?,sql,recursion,Sql,Recursion,我浏览了下面的代码 我无法理解计算机如何评估这些代码,从而使cte_计数永远终止 在我看来,它是这样工作的: cte_count是一个表,它包含一个名为n的列,其中包含1和(递归成员)的结果 首先:n+1应该是什么意思?就我而言,n是一列的名称 假设n+1只是以某种方式增加了一个计数器: 第二,在之前评估cte_计数时,如何检查终止条件 我希望有人能更清楚地说明这些查询是如何工作的 我无法理解计算机如何评估这些代码,从而使cte_计数永远终止 简而言之,它不知道。 递归CTE最多只能递归327

我浏览了下面的代码

我无法理解计算机如何评估这些代码,从而使cte_计数永远终止

在我看来,它是这样工作的:

  • cte_count是一个表,它包含一个名为n的列,其中包含1和(递归成员)的结果
  • 首先:n+1应该是什么意思?就我而言,n是一列的名称

    假设n+1只是以某种方式增加了一个计数器: 第二,在之前评估cte_计数时,如何检查终止条件

    我希望有人能更清楚地说明这些查询是如何工作的

    我无法理解计算机如何评估这些代码,从而使cte_计数永远终止

    简而言之,它不知道。 递归CTE最多只能递归32767次。请参阅官方文档,然后抛出达到最大递归值的信号。可以使用
    MAXRECURSION
    属性设置最大递归的确切数目

    是N是列的名称。递归查询部分

    select n+1  from cte_count where n<50
    

    从cte_count中选择n+1,其中n
    其中n<50
    终止递归。
    n+1
    是返回增加值的表达式,仍然作为列名n返回(如UNION ALL的first SELECT中所指定的。=每次迭代时n<50得到检查???。因此n+1意味着n中的每个元素增加1?这是否进一步意味着SQL确实在计算这些表达式需要32767次递归?@Niclas我想回答这个问题,但后来我找到了一个与postgres SQL相关的极好答案,但它确实解释了逻辑
    select n+1  as n from cte_count where n<50