2011-12-05 60 views
1

我想寫一個有效的遞歸查詢。我跑遍了CTE並找到了一些例子。然而,我發現每個例子都返回了相同的數據,這些數據是遞歸的,我需要返回一些不同的數據。使用遞歸查詢使用CTE

例如,我的分層數據是位置表。

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

但我想返回的數據是在一個活動表中。我想要返回與特定位置相關的所有活動以及所有「子」位置。

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

我是CTEs的新手,無法完全看到如何從我的例子中做到這一點。任何幫助,將不勝感激。

回答

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

我明白了。你只是做了我見過的例子,然後通過對結果進行連接來選擇相關的行。謝謝! –