我正在尝试编写一个有效的递归查询。我遇到过CTE并找到了很多例子。但是,我发现的每个例子都返回了相同的递归数据,我需要返回一些不同的数据。
例如,我的分层数据是位置表。
[Locations]
ID int
Title nvarchar(100)
ParentLocationID int
但我想要返回的数据位于“活动”表中。我想返回与特定位置和所有“子”位置相关的所有活动。
[Activities]
ID int
Title nvarchar(100)
LocationID int
我是CTE的新手,从我的例子中看不出如何做到这一点。任何帮助将不胜感激。
答案 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