我有一个包含以下架构的表:
ID , CatID, ParentCatID, SiteID
我希望获得属于根类别的所有网站(表示其ParentCatID = 0)及其所有后代。
例如:
ID , CatID, ParentCatID, SiteID
--------------------------------
1 , 2 , 0 , 3
1 , 4 , 2 , 6
1 , 5 , 4 , 7
在此示例中,CatID 2是4的父级,4是5的父级。
如何获取属于根类别及其所有后代的所有SiteID。
答案 0 :(得分:5)
使用recursive Common Table Expression, supported on SQL Server 2005+:
WITH hierarchy AS (
SELECT yt.id,
yt.catid,
yt.parentcatid,
yt.siteid
FROM YOUR_TABLE yt
WHERE yt.parentcatid = 0
UNION ALL
SELECT yt.id,
yt.catid,
yt.parentcatid,
yt.siteid
FROM YOUR_TABLE yt
JOIN hierarchy h ON h.catid = yt.catid)
SELECT t.*
FROM hierarchy t
OPTION (maxrecursion 1000)
如果你得到:
声明终止。在语句完成之前,最大递归100已用尽
默认值为100次递归。可以通过maxrecursion
选项设置最大递归次数,最多可达32767。