给定表格:
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 |
+-------------+-----------+
函数/任何解决方案都应为Root1、Child1Sub-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;
这是一个数据库<>不停摆弄