Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取分层数据中所有父对象的所有子对象_Sql_Sql Server_Common Table Expression_Recursive Query - Fatal编程技术网

Sql 如何获取分层数据中所有父对象的所有子对象

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

我有一个表,它有子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_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%的子级),等等。其目的是递归地检查所有层次结构。对不起,这很难解释,但这只是我对问题的解释,可能是作者的另一个意思。也许是有帮助的。。。它以相反的方式显示层次结构(从叶到根)。但是一个唯一的根是必要的,即使它是一个虚拟的根。