2

テーブル内の特定のレコードに同じテーブル内の親があり、それらの親に独自の親がある場合、異なるレコードが異なる数の親を持つことができる場合、要求されたレコードのすべての親のレコードを取得するクエリはどれですか。

例: レコード 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
4

1 に答える 1

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
于 2012-04-28T22:58:18.527 に答える