T-SQL查询:获取父节点的子节点

时间:2010-08-30 15:38:42

标签: sql sql-server tsql

我有一个包含以下架构的表:

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。

1 个答案:

答案 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。

相关问题