0

我有一个名为的表Project,其中存储了父子关系。列中的条目parentprojectid意味着相应的项目实例是子项。该表的列如下:

projectid, parentprojectid

当我在这个表上运行一个 SELECT 查询时,结果数据应该由每个父级及其所有子级(及其子级的子级,如果适用)组成。我如何实现这一目标?

以下是数据的示例:

projectid parentprojid  
项目 1 空  
项目 11 项目 1  
项目 12 项目 1  
项目121项目12  
项目2空  
proj3 空
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 回答