2012-04-28 124 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 2012-04-28 20:38:01

回答

1

如果您假定固定的最大深度級別,則可以表示層次結構。例如,在這個示例中,我假設不超過四個深度級別。如果沒有用於遞歸評估的公用表表達式,除此類解決方案或使用變量外,沒有單個查詢方法。

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