我在弄清楚如何创建一个表格,显示子列与其后续父列的所有关系时遇到了一些麻烦。我在Teradata SQL Assistant中使用SQL。
例如,这是我的数据:
Parent | Child A | B A | C B | D E | E
我希望能够获得一个输出表,显示最低级别的子元素及其后续的所有父元素,如下所示:
Child | ParentL1 | Parent L2 C | A D | B | A E
事情是,我不知道我的数据中存在多少级别的父级,我只能访问查询数据,因此我无法创建新表,更改此表或更改任何值。
有没有办法在查询中获得预期的输出?
谢谢!
答案 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;