2011-12-05 7 views
1

効率的な再帰クエリを作成しようとしています。私はCTEを横断していくつかの例を見つけました。しかし、私が見つけたすべての例では、いくつかの異なるデータを返す必要がある再帰的な同じデータを返しています。CTEを使用した再帰クエリの使用

たとえば、私の階層データはLocationsのテーブルです。

[Locations] 
ID int 
Title nvarchar(100) 
ParentLocationID int 

ただし、返信したいデータはアクティビティのテーブルにあります。特定の場所に関連付けられたすべてのアクティビティ、およびすべての「子」の場所を返したいと思います。

[Activities] 
ID int 
Title nvarchar(100) 
LocationID int 

私はCTEの新人です。私が持っている例からこれをどうやって行うのかよく分かりません。どんな助けもありがとう。

答えて

4

再帰的なCTEを使用して階層内のすべての場所を検索し、Activitiesテーブルをその結果に追加します。

;WITH R 
    AS (SELECT ID, 
       Title, 
       ParentLocationID 
     FROM [Locations] 
     WHERE ID = @LocationId 
     UNION ALL 
     SELECT L.ID, 
       L.Title, 
       L.ParentLocationID 
     FROM [Locations] L 
       JOIN R 
        ON L.ParentLocationID = R.ID) 
SELECT * /*TODO: Select columns of interest*/ 
FROM R 
     JOIN [Activities] A 
     ON A.LocationID = R.ID 
+0

今すぐ表示されます。あなたは、私が見ていた例をやっているだけで、結果を結合して関連する行を選択するだけです。ありがとう! –

関連する問題