一尘不染

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

sql

我有一个具有以下架构的表:

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。


阅读 204

收藏
2021-03-17

共1个答案

一尘不染

使用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。

2021-03-17