在SQL中递归

whi*_*one 5 sql recursion

我正在学习SQL,并且很难理解以下递归SQL语句。

WITH RECURSIVE t(n) AS (
    SELECT 1
    UNION ALL
    SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
Run Code Online (Sandbox Code Playgroud)

n和t来自SELECT sum(n) FROM t;什么?据我了解,n是一个数,t是一个集合。我对吗?

另外,此语句中如何触发递归?

Gor*_*off 5

您使用的语法看起来像 Postgres。SQL 中的“递归”并不是真正的递归,而是迭代。你的说法是:

WITH RECURSIVE t(n) AS (
    SELECT 1
    UNION ALL
    SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
Run Code Online (Sandbox Code Playgroud)

for 语句t被评估为:

  1. 评估非自引用部分 ( select 1)。
  2. 然后评估自我引用部分。(最初这给出了 2。)
  3. 然后再次评估自引用部分。(3).
  4. 依此类推,而条件仍然有效 ( n < 100)。

完成此操作后,t子查询就完成了,可以评估最终语句。