使用CTE的递归查询

时间:2011-12-05 23:06:20

标签: sql-server hierarchical-data

我正在尝试编写一个有效的递归查询。我遇到过CTE并找到了很多例子。但是,我发现的每个例子都返回了相同的递归数据,我需要返回一些不同的数据。

例如,我的分层数据是位置表。

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

但我想要返回的数据位于“活动”表中。我想返回与特定位置和所有“子”位置相关的所有活动。

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

我是CTE的新手,从我的例子中看不出如何做到这一点。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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