SQL - 从父列和子列创建树

时间:2012-07-04 10:05:44

标签: sql tree parent teradata

我在弄清楚如何创建一个表格,显示子列与其后续父列的所有关系时遇到了一些麻烦。我在Teradata SQL Assistant中使用SQL。

例如,这是我的数据:

Parent | Child                               
A      | B                                                     
A      | C         
B      | D           
E      | E

我希望能够获得一个输出表,显示最低级别的子元素及其后续的所有父元素,如下所示:

Child | ParentL1 | Parent L2        
C     | A       
D     | B        | A       
E

事情是,我不知道我的数据中存在多少级别的父级,我只能访问查询数据,因此我无法创建新表,更改此表或更改任何值。

有没有办法在查询中获得预期的输出?

谢谢!

1 个答案:

答案 0 :(得分:3)

像这样(用PostgreSQL测试,因为我没有Teradata可用):

with recursive tree as (

    select parent, child, child||'/'||parent as path
    from foo
    where child not in (select parent from foo)
    or parent = child

    union all

    select c.parent, c.child, p.path||'/'||c.parent
    from foo c
      join tree p on c.child = p.parent
    where c.parent <> c.child
)
select path
from tree
order by parent;