with CTE(x) as (
select x = 1
union all
select X=X+1 from CTE where x < 4
union all
select X=X+1 from CTE where x < 4
)
select x from CTE
GO
结果将是。 。
x
1
2
2
3
3
4
4
4
4
3
3
4
4
4
4
答案 0 :(得分:1)
select x = 1
被称为锚元素。它是递归调用的基础(正如Alex K.指出这是一个递归CTE)。
2两个来自递归成员
select X=X+1 from CTE where x < 4
union all
select X=X+1 from CTE where x < 4
在锚点上被调用1.四个3来自于在两个2上被调用的递归成员,最后8个四个来自在4个三个上调用的递归成员。
然后由于条件而停止
x < 4
答案 1 :(得分:1)
如果你只是一点一点地完成它很容易......
首先你有一个。
然后,1从UNIONs创建两个2,给出1,2 *,2 *(星号表示尚未处理的元素)。
然后处理2中的一个以给出1,2 *,2,3 *,3 *。请注意,我处理的下一个是最近的未处理元素。这使得它首先采用深度而不是广度优先。该系列然后沿着这些方向扩展:
1
1,2*,2*
1,2*,2,3*,3*
1,2*,2,3*,3,4,4
1,2*,2,3,3,4,4,4,4
1,2,2,3,3,4,4,4,4,3*,3*
1,2,2,3,3,4,4,4,4,3*,3,4,4
1,2,2,3,3,4,4,4,4,3,3,4,4,4,4
Fours永远不需要处理,所以不要*标记。
答案 2 :(得分:0)
选择1。
取选定值(1),加1并将其与所选值加1合并。(2,2)
刚刚添加两行(2,2)并重复。 (3,3)
...
“四是出局。”