【发布时间】:2020-06-25 04:10:23
【问题描述】:
供参考,这里是:
WITH range_10 AS (
SELECT 1 AS n
UNION ALL
SELECT n+1 AS n
FROM range_10
WHERE n < 10
)
SELECT * FROM range_10;
正如我们都知道和喜爱的那样,这会生成一列 n,其值从 1 到 10。但是,我对为什么输出中没有 n 的重复值感到困惑。以下是我对如何执行此查询的理解:
迭代 1
range_10 开始为空
range_10 结束为:
- 1
迭代 2
range_10 结束为:
- 1
- 2
迭代 3
range_10 结束为:
- 1
- 2
- 2
- 3
为什么?因为我们SELECT'ed n+1 为表的所有行(其中有两个),然后做了一个UNION ALL,它不会删除重复项。为了更清楚地说明这一点:
迭代 4
- 1
- 2
- 2
- 3
- 2
- 3
- 3
- 4
在递归查询的上下文中,UNION ALL 真的意味着UNION 吗?还是我错过了一些关于递归查询的更基本的东西?
【问题讨论】:
标签: sql recursion common-table-expression recursive-query