如何通过postgres找到线程的主要父级

时间:2017-02-08 18:02:52

标签: postgresql

我正在尝试找到多行数据的父级。让我们说我有三条记录,第一条记录是父记录(记录#123)。作为对第一个的回复的第二个记录(记录#945)具有#123的父亲。但是,第三条记录(记录#567),它是对第二条消息的回复,其父级为945.我希望父级显示123而不是945.(最后我想回答一般有多少线程消息)参见下面的示例图表。任何有关如何通过postgresql执行此操作的帮助将非常感激。

header_id   id   parent   FIELD_NEEDED
87654311    123  null       123
87654311    945  123        123
87654311    567  945        123
87654311    691  123        123
87654311    876  null       876
87654311    721  null       721
87654311    108  721        721
87654311    236  108        721

1 个答案:

答案 0 :(得分:0)

使用递归查询:

WITH RECURSIVE q(header_id, id ,parent,field_needed, root, pp) 
as (
    select header_id,id ,parent,field_needed,id as root, parent pp
    from table1 t
    union all
    select q.header_id,q.id ,q.parent,q.field_needed,t.id, t.parent
    from q
    join table1 t 
    on t.id = q.pp
)
select header_id, id ,parent,field_needed, root
from q
where pp is null