You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift中使用递归CTE获取所有ID的超级父ID问题修正

修正Redshift递归CTE获取超级父ID的问题

你的递归CTE存在两处问题,导致结果不符合预期:

  • 顶层节点(parent_id为null)的super_parent_id被错误设置为自身ID,而不是期望的null;
  • 递归阶段逻辑有误,当父节点是顶层节点时,子节点的super_parent_id会继承为null,而非顶层节点的ID。

以下是修正后的代码:

WITH RECURSIVE ParentHierarchy AS (
    -- 初始步骤:处理无父节点的顶层节点
    SELECT 
        id,
        parent_id,
        id AS root_id,  -- 记录当前顶层节点为该树的根ID
        NULL AS super_parent_id  -- 顶层节点无超级父ID,设为null
    FROM org
    WHERE parent_id IS NULL

    UNION ALL

    -- 递归步骤:遍历子节点,继承父节点所属树的根ID作为超级父ID
    SELECT 
        t.id,
        t.parent_id,
        ph.root_id,  -- 继承父节点对应的根ID
        ph.root_id AS super_parent_id  -- 子节点的超级父ID就是所属树的顶层根节点ID
    FROM org t
    JOIN ParentHierarchy ph ON t.parent_id = ph.id
)
SELECT id, parent_id, super_parent_id
FROM ParentHierarchy
ORDER BY id;

结果验证

执行上述代码后,会得到你期望的输出:

idparent_idsuper_parent_id
a1nullnull
b1c1a1
c1a1a1
d1nullnull

内容的提问来源于stack exchange,提问作者sundarls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:42:28