繁体   English   中英

从自引用表中获取所有子项(子代,子代)和父代

[英]Get all subitems (children, grandchildren) and parents from a self referencing table

我想创建一个“可选方法”(无论它是视图还是函数,存储过程或其他东西,我都不知道是否还有其他方法)来获取所有直接父母和所有孩子,自孙表中的,孙,孙代等记录。 我想从C#(.NET)调用的“可选方法”

我们有一个称为entities的表,它(除其他外)具有一个属性parentId ,它引用entities表的Id字段。 通过这种方式,我们对实体树进行建模(在我们的案例中是建筑物,思想屋,地板,房间等的元素)

父节点(如果可视化)是形成到根元素的直线的节点。

子节点可以可视化地“展开”。

如果必须在两个单独的语句中进行选择就可以了。

在C#中,我知道如何执行此操作,但是我不想向数据库发出大量请求,并且我认为Sql Server本身可以快速执行此操作,但我不知道该如何操作:-)

尝试使用以下递归CTE作为解决方案的基础:

WITH TREE AS (
  SELECT     ROOT.Id        
            ,ROOT.ParentId  
            ,ROOT.Prop1
            ,ROOT.Prop2 
            ...
            ,ROOT.PropN                 
            ,1 AS Level 
  FROM       ENTITIES ROOT      
  -- list entities starting from ROOT node (no ParentId)
  WHERE      ROOT.ParentId IS NULL 
  -- or list entities starting from a specified node
  -- WHERE ROOT.Id = @entityId

  UNION ALL

  SELECT     CHILD.Id
            ,CHILD.ParentId 
            ,CHILD.Prop1
            ,CHILD.Prop2    
            ...
            ,CHILD.PropN                
            ,PARENT.Level + 1
  FROM       ENTITIES CHILD INNER JOIN 
             TREE PARENT ON CHILD.ParentId = PARENT.Id
  WHERE      CHILD.ParentId IS NOT NULL
)

SELECT *  FROM TREE

如果需要传递参数,可以将CTE放在VIEWStored Procedure

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM