Postgres获取自引用表的根



给定表格:

CREATE TABLE self-ref (
name VARCHAR NOT NULL,
parent VARCHAR REFERENCES self-ref(name),
PRIMARY KEY(name)
);

如果我从表(以及Pkey(中获得一个名称,我如何获得它的"根"级父级的名称:父级为NULL的名称,该名称由给定的名称(间接(引用

假设我有这些值(我不知道我会得到哪些值(:

+-------------+-----------+
| Name        | Parent    |
+-------------+-----------+
| Root 1      | NULL      |
| Root 2      | NULL      |
| Child 1     | Root 1    |
| Child 2     | Root 2    |
| Sub-child 1 | Child 1   |
+-------------+-----------+

函数/任何解决方案都应为Root1Child1Sub-chil1oot1;并且对于根2子2应返回

根号2我怎样才能做到这一点?注意:它真的必须是Postgres。。。。

您需要一个递归CTE。语法看起来像:

with recursive cte as (
select name, name as parent
from selfref
where parent is null
union all
select s.name, cte.parent
from cte join
selfref s
on s.parent = cte.name
)
select *
from cte;

这是一个数据库<>不停摆弄

最新更新