0

Project親子関係が格納されているという名前のテーブルがあります。列のエントリはparentprojectid、それぞれのプロジェクト インスタンスが子であることを意味します。表の列は次のとおりです。

projectid, parentprojectid

このテーブルで SELECT クエリを実行すると、結果のデータはすべての親とそれに続くすべての子 (および該当する場合はその子の子) で構成されるはずです。どうすればこれを達成できますか?

データがどのように見えるかの例を次に示します。

projectid 親プロジェクト  
proj1 null  
proj11 proj1  
proj12 proj1  
proj121 proj12  
proj2 null  
proj3 null
4

1 に答える 1

1

再帰共通テーブル式を使用し、すべての親を配列に結合してから、結果の配列で並べ替えます。

with recursive cte as (
    select t.projectid, t.parentprojid, array[t.projectid::text] as path
    from Table1 as t
    where t.parentprojid is null
    union all
    select t.projectid, t.parentprojid, c.path || t.projectid::text
    from Table1 as t
        inner join cte as c on c.projectid = t.parentprojid
)
select projectid, parentprojid
from cte
order by path

sql fiddle demo

于 2013-10-17T12:01:48.180 に答える