[英]Postgres get root of self-referential table
給定表格:
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 |
+-------------+-----------+
函數/任何解決方案都應該為Root 1 、 Child 1和Sub-child 1返回Root 1 ; 並且應該為Root 2和Child 2返回Root 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;
這是一個 db<>fiddle。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.