具有多个根和动态的 Connectby

Connectby with more than one root and dynamic

我有这个table“con.cuenta”

我用connectby来获取关卡:

SELECT t.cue_id, t.cue_id_ref, (t.level+1) nivel, t.branch 
FROM connectby('con.cuenta', 'cue_id', 'cue_id_ref', '1', 0,'/')
AS t(cue_id bigint, cue_id_ref bigint, level int,branch text)

问题是我有多个根,而 connectby 方法只适用于一个根。一些替代方案?

自从在 Postgres 8.4

中引入 recursive CTEs 以来,connectby 扩展几乎已经过时了

使用递归 CTE,只需对非递归部分使用正确的 WHERE 子句即可处理多棵树:

with recursive tree as (
  select cue_id, 
         cue_id_ref, 
         1 as level, 
         cue_id::text as branch
  from "con.cuenta"
  where cue_id_ref is null
  union all
  select c.cue_id, 
         c.cue_id_ref, 
         p.level + 1, 
         concat(p.branch, '/', c.cue_id)
  from "con.cuenta" c
    join tree p on p.cue_id = c.cue_id_ref
)
select cue_id, cue_id_ref, level as nivel, branch
from tree;