如何获取所有子ID

时间:2012-07-11 15:12:47

标签: sql-server

我有一个包含以下列的表 -

  1. ID(设备ID)
  2. DeviceName(设备名称)
  3. ParentID(父设备的ID)
  4. 根据表格,我的数据存储在树形结构中,即一个设备包含多个其他设备,这些设备又包含多个设备。

    我需要的是获取属于给定设备ID的所有设备的ID。 我需要正确的SQL查询来获取父节点下的所有子节点(包括它自己的子节点)。

    对于前。假设A是具有子B1,B2的顶级节点。

    B1包含C1,C2子节点,而B2包含C3,C4。

    C1再次包含D1,D2 .... 等等。

    如果提供A,我需要的是获得所有B1,B2,C1,C2,C3,C4,D1,D2 ...... ....

    感谢您分享您的时间。

1 个答案:

答案 0 :(得分:6)

您需要使用recursive CTE

;WITH r as (
     SELECT ID
     FROM DevicesTable
     WHERE ParentID = @someID

     UNION ALL

     SELECT d.ID 
     FROM DevicesTable d
        INNER JOIN r 
           ON d.ParentID = r.ID
)
SELECT ID
FROM r