簡體   English   中英

Postgres 獲取自引用表的根

[英]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 1Child 1Sub-child 1返回Root 1 ; 並且應該為Root 2Child 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM