你能帮我写两个表的递归查询吗?

问题描述 投票:-4回答:1

我需要编写递归查询来查找此表中的所有子节点。

例如,我需要找到ParentManagerTaskId = 6的所有子ExecutorTasks

ManagerTasks
{
  Id,
  ParentExecutorTaskId
}

ExecutorTasks
{
  Id,
  ParentManagerTaskId
}



;WITH query AS 
 (
  SELECT et.Id,et.ParentManagerTaskId,mt.ParentExecutorTaskId
  FROM [Planning.ExecutorTasks] et
  left outer join [Planning.ManagerTasks] mt on et.ParentManagerTaskId=mt.Id
  WHERE mt.Id = 6
  UNION ALL      
  SELECT q.Id, q.ParentManagerTaskId,et.Id
  FROM [Planning.ExecutorTasks] et 
   JOIN query q ON et.Id = q.Id   
  )
  SELECT  *
  FROM query
sql sql-server hierarchical-data recursive-query
1个回答
0
投票

您的模型有点误导,因为您有2个彼此相关的表,并且您只想显示一个表中的记录。这意味着您必须在递归部分上执行2个连接以获取相关实体的子级。

尝试使用以下内容:

;WITH Recursion AS
(
    -- Anchor
    SELECT
        ExecutorTaskId = E.Id,
        RecursionLevel = 0
    FROM
        [Planning.ExecutorTasks] AS E
    WHERE
        E.ParentManagerTaskId = 6

    UNION ALL

    -- Further childs
    SELECT
        ExecutorTaskId = E.Id,
        RecursionLevel = R.RecursionLevel + 1
    FROM
        Recursion AS R
        INNER JOIN [Planning.ManagerTasks] AS M ON R.ExecutorTaskId = M.ParentExecutorTaskId
        INNER JOIN [Planning.ExecutorTasks] AS E ON M.Id = E.ParentManagerTaskId
)
SELECT
    R.RecursionLevel,
    R.ExecutorTaskId
FROM
    Recursion AS R
ORDER BY
    R.RecursionLevel,
    R.ExecutorTaskId

如果您不提供示例值,预期结果和表的DDL,我无法测试。

© www.soinside.com 2019 - 2024. All rights reserved.