1

ID と PARENTID の 2 つのフィールドを介して再帰レコードを格納するテーブルがあります。

親をツリーの要素に関連付けることができる機能があります。自分自身の「親」になり得る要素を選択すると、結果のリストから、直接的または間接的に自分に依存するすべての要素だけでなく、既に依存している要素も明らかに除外されます。

例を挙げましょう。次のサンプル階層があるとします。

ID                  PARENT_ID
-----------         ------------------
1                    NULL
2                    1
3                    NULL
4                    2
5                    1
6                    3

要素の親になることができる要素を見つけたい場合は、実際の構造とは関係がないため、ID = 4要素のみを検討します。5 - 3 - 6

CTE クエリでこれらの要素を取得するにはどうすればよいですか?

4

1 に答える 1

1
Select *
into #tmp
From Tree2

;WITH Rollups AS (
    SELECT ID, Parent_Id
    FROM tree2 where ID=4
    UNION ALL
    SELECT parent.Id, parent.Parent_Id
    FROM tree2 parent 
    INNER JOIN Rollups child ON child.Id = parent.Parent_Id
)
Delete #tmp from Rollups where #tmp.ID=Rollups.ID

;WITH Rollups AS (
    SELECT ID, Parent_Id
    FROM tree2 where ID=4
    UNION ALL
    SELECT parent.Id, parent.Parent_Id
    FROM tree2 parent 
    INNER JOIN Rollups child ON child.Parent_Id = parent.Id
)
Delete #tmp from Rollups where #tmp.ID=Rollups.ID

Select * from #tmp
Drop Table #tmp 
于 2012-11-12T19:22:39.677 に答える