具有多个根和动态的 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;
我有这个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;