2012-07-04 5 views
1

하위 열과 그 후속 부모 열과의 모든 관계를 보여주는 테이블을 만드는 방법을 알아 내는데 어려움이 있습니다. Teradata SQL Assistant에서 SQL을 사용하고 있습니다.부모 - 자식 열에서 트리 만들기

예를 들어

, 여기에 데이터 난이 다음과 같이

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

내가 모든 후속 부모 요소와 가장 낮은 수준 하위 요소를 보여주는, 출력 테이블을 얻을 수 있도록하려면 :

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

데이터의 부모 수준이 얼마나되는지 알지 못하고 데이터 쿼리에만 액세스 할 수 있으므로 새 테이블을 만들거나이 테이블을 변경하거나 값을 변경할 수 없습니다.

쿼리에서 예상되는 결과를 얻는 방법이 있습니까?

감사합니다. (나는 테라 데이타는 가능한하지 않는 PostgreSQL의 테스트)이 같은

+1

합니까 테라 데이타 지원 재귀 공통 테이블 표현식? ('WITH RECURSIVE ...') –

+0

예! :) – tremonti92

+0

계층 구조의 "시작"또는 "끝"을 어떻게 식별합니까? –

답변

3

뭔가 :

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; 
+0

고마워! 나는 이것을 시험해보고 그것이 어떻게 드러났는지 알려줄 것입니다! – tremonti92