2012-04-28 13 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 
関連する問題