递归查询的终结者

时间:2015-08-12 20:59:39

标签: sql

递归查询的终止符是什么?
根据:

  

递归执行的语义如下:
     将CTE表达式拆分为锚点和递归成员      运行锚定成员创建第一个调用或基本结果集(T0)      以Ti作为输入并以Ti + 1作为输出运行递归成员      重复步骤3,直到返回空集      返回结果集。这是T0到Tn的UNION ALL。

这是对的吗?

终止符应该是:“不返回条目”?

1 个答案:

答案 0 :(得分:2)

评论时间有点长。

递归CTE并不是真正的递归"该术语在其他编程语言中的使用方式。当我想到递归函数时,我会想到保存局部变量并为下一个函数调用创建一个新框架,依此类推。

相反,"递归" CTE真的是归纳的。他们从" 0"开始 - 锚 - 并重复将递归成员应用于每次迭代时创建的结果集的新行。由于归纳步骤应用于新行,因此在没有新行时会停止。

因此,当返回空集时,您对递归停止的解释是对所发生情况的恰当描述。但是,递归步骤仅适用于新行。