SQL — создание дерева из родительского и дочернего столбцов

У меня возникли проблемы с выяснением того, как создать таблицу, показывающую все отношения дочернего столбца с его последующими родительскими столбцами. Я использую SQL в Teradata SQL Assistant.

Например, вот данные, которые у меня есть:

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

Я хочу иметь возможность получить выходную таблицу, показывающую дочерний элемент самого низкого уровня со всеми его последующими родительскими элементами следующим образом:

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

Дело в том, что я не знаю, сколько уровней родителей существует в моих данных, и мне разрешен доступ только к данным запроса, поэтому я не могу создавать новые таблицы, изменять эту таблицу или изменять какие-либо значения.

Есть ли способ получить ожидаемый результат в запросе?

Благодарю вас!


person tremonti92    schedule 04.07.2012    source источник
comment
Поддерживает ли Teradata рекурсивные общие табличные выражения? (WITH RECURSIVE ...)   -  person a_horse_with_no_name    schedule 04.07.2012
comment
Как определить начало или конец иерархии?   -  person a_horse_with_no_name    schedule 04.07.2012


Ответы (1)


Что-то вроде этого (проверено с 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;
person a_horse_with_no_name    schedule 04.07.2012
comment
Спасибо! Я попробую это и дам вам знать, как это получилось! - person tremonti92; 04.07.2012