gpt4 book ai didi

database - 这个递归是如何 self 重复的?

转载 作者:行者123 更新时间:2023-11-29 13:07:49 24 4
gpt4 key购买 nike

我对一些代码有疑问。

我有一个叫做喜剧 Actor 的关系。它具有喜剧 Actor 和前喜剧 Actor 的属性。所以第一个喜剧 Actor 说鲍勃,在他的前一个喜剧 Actor 的领域里有空。我的问题是,在找到所有子实例之前,这段代码如何重复?我就是无法理解它。

我知道第一部分:UNION ALL 之前的部分选择所有父元素,所以所有没有喜剧 Actor 在他们之前表演的喜剧 Actor (前面的喜剧 Actor ),但是如何选择父元素下的所有其他喜剧 Actor ?是什么让它递归?

with recursive tree as (
select company, comedian, preceding_comedian, 1 as level
from the_table
where preceding_comedian is null
union all
select ch.company, ch.comedian, ch.preceding_comedian, p.level + 1
from the_table ch
join tree p on ch.preceding_comedian = p.comedian
)

最佳答案

  • 首先,执行查询的非递归部分:

    select company, comedian, preceding_comedian, 1 as level
    from the_table
    where preceding_comedian is null

    并将结果放入“工作表”。

  • 然后执行查询的递归部分,其中工作表替换递归 CTE:

    select ch.company, ch.comedian, ch.preceding_comedian, p.level + 1
    from the_table ch
    join <work-table> p on ch.preceding_comedian = p.comedian

    结果被添加到工作表中(如果使用UNION而不是UNION ALL,结果中的重复项将被删除)。

  • 重复第二步,直到工作表不再发生变化。

生成的工作表是 CTE 的结果。

所以它实际上与其说是递归,不如说是“迭代”CTE。

关于database - 这个递归是如何 self 重复的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58830513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com