对父母层次结构的递归查询.从顶点获得后代



i有一个表,将层次结构数据以父子格式存储在一个顶部节点。多个级别,每个父母都有多个孩子。我如何编写递归查询以仅选择从特定节点到最后一个孩子的父子行?

示例表

Parent|child 
1     |2 
1     |3 
2     |4 
2     |5 
3     |6 
3     |7 
6     |8

我如何仅从节点3及其所有后代检索行?

如果您的DBMS是SQL Server,则可以使用Recursion通过常见的表格(CTE)来完成此操作。我相信这在所有版本2008R2及以上都起作用。以下查询将为您提供所有父母 - 子女关系,这些父母是3的后代。

CREATE TABLE dbo.ParentChildRel
(
    Parent INT
   ,Child INT
)
INSERT INTO dbo.ParentChildRel
VALUES (1,2)
      ,(1,3)
      ,(2,4)
      ,(2,5)
      ,(3,6)
      ,(3,7)
      ,(6,8)
      ,(7,10)
;WITH Hierarchy AS
    (
        SELECT Parent   
              ,Child
        FROM dbo.ParentChildRel
        WHERE Parent = 3
        UNION ALL
        SELECT rel.Parent
              ,rel.Child
        FROM Hierarchy hier
             INNER JOIN dbo.ParentChildRel rel ON hier.Child = rel.Parent
    )
SELECT *
FROM Hierarchy

结果

Parent  Child
3       6
3       7
7       10
6       8

最新更新