2012-04-28 4 views
2

테이블 내의 주어진 레코드에는 동일한 테이블 내에 부모가 있고 그 부모는 부모를가집니다. 어떤 쿼리는 요청 된 레코드의 모든 부모에 대한 레코드를 가져다줍니다. 부모님.중첩 된 레코드에 대한 SQL 쿼리

예 : 레코드 4의 ID를 갖고 있으며 모든 상위 레코드 (1,2,3)를 가져 오려고합니다. 물론 내가 레코드 4를 얻을 수 있고 부모가 누구인지 확인하고 레코드 3을 얻고, 부모가 누구인지 확인하고 레코드 2를 얻습니다. 레코드를 얻을 때까지 부모는 없지만 모든 쿼리를 얻을 수있는 단일 쿼리가 있습니다. 기록?

Example Table: 
ID | Type | Parent ID 
---------------------------- 
1 |Master| 
2 |Sub 1 | 1 
3 |Sub 2 | 2 
4 |Sub 3 | 3 
5 |Master| 
6 |Sub 1 | 5 
+0

나를 위해 작동하도록 쿼리를 가져올 수 없습니다. NULL이 표시됩니다. 이 예제로 다시 쓸 수 있습니까? – pmm

답변

1

고정 된 최대 깊이 수준을 가정하면 계층 구조를 나타낼 수 있습니다. 예를 들어,이 샘플에서는 깊이가 4 단계 이상이라고 가정하지 않습니다. 재귀 평가를위한 공통 테이블식이 없으면이 유형의 솔루션을 벗어나거나 변수를 사용하는 단일 쿼리를 의미하지 않습니다.

Select T1.Id, T1.Type 
    , Concat(Coalesce(Concat(Cast(T4.Id As char(10)),','),'') 
     , Coalesce(Concat(Cast(T3.Id As char(10)),','),'') 
     , Coalesce(Concat(Cast(T2.Id As char(10)),','),'')) 
     As Hierarchy 
From ExampleTable As T1 
    Left Join ExampleTable As T2 
     On T2.Id = T1.ParentId 
    Left Join ExampleTable As T3 
     On T3.Id = T2.ParentId 
    Left Join ExampleTable As T4 
     On T4.Id = T3.ParentId