Sql 如何获取分层数据中所有父对象的所有子对象
我有一个表,它有子id和父id。子id有叶节点,父id有直接父节点。我需要使用SQL查询获取所有家长及其所有子女 有人能帮我吗 我尝试了一个递归CTE来获取某个特定父级的所有子级,我对此有一个查询,但现在我需要在一个表中获取所有父级及其所有子级Sql 如何获取分层数据中所有父对象的所有子对象,sql,sql-server,common-table-expression,recursive-query,Sql,Sql Server,Common Table Expression,Recursive Query,我有一个表,它有子id和父id。子id有叶节点,父id有直接父节点。我需要使用SQL查询获取所有家长及其所有子女 有人能帮我吗 我尝试了一个递归CTE来获取某个特定父级的所有子级,我对此有一个查询,但现在我需要在一个表中获取所有父级及其所有子级 WITH CTE as ( SELECT child_id,parent_id FROM Hierarchy where parent_id ='Africa' UNION ALL SELECT Hierarchy.child
WITH CTE as (
SELECT child_id,parent_id
FROM Hierarchy
where parent_id ='Africa'
UNION ALL
SELECT Hierarchy.child_id,Hierarchy.parent_id
FROM Hierarchy
inner join CTE on Hierarchy.parent_id=cte.child_id
where Hierarchy.parent_id !='Africa'
)
SELECT *
FROM CTE
OPTION (MAXRECURSION 0)
通过上面的查询,我只得到了非洲的孩子。我想要所有大陆的孩子,我想你不需要CTE。假设child_id是主键(或者至少是某种唯一标识符),则简单的自连接可以:
SELECT
p.parent_id,
c.child_id
FROM
Hierarchy p
INNER JOIN Hierarchy c ON c.parent_id = p.child_id
您不需要
where Hierarchy.parent\u id!='非洲“
删除它您知道层次结构的最大深度吗?或者需要盲目地绕过所有层次结构?如果您加入,我们无法知道child的子级,例如:)对不起,在这种情况下,我没有完全理解您的问题。您能展示一下表中的一些示例行以及预期的查询结果吗?这不是我的问题,但我认为目的是获取所有层次结构,而不仅仅是父子关系。例如,我们想要新建,我们有5个根(父,没有父),然后是它们的子级(那些行,其中ParentID=RootID),然后是下一级的子级(那些行,其中ParentID=root parent%的子级),等等。其目的是递归地检查所有层次结构。对不起,这很难解释,但这只是我对问题的解释,可能是作者的另一个意思。也许是有帮助的。。。它以相反的方式显示层次结构(从叶到根)。但是一个唯一的根是必要的,即使它是一个虚拟的根。