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

如何在Presto层级表中查询所有记录的根节点?

在Presto中查询树形结构的根节点

这是个很常见的树形结构遍历需求,Presto支持递归CTE(Common Table Expression),完全可以搞定这个向上查找根节点的问题。假设你的表名为tree_nodes,我来给你一步步拆解解决方案:

核心思路

利用递归CTE的特性,分成两部分处理:

  1. 锚点成员:先筛选出所有根节点(ParentId IS NULL的节点),它们的根就是NULL,完全匹配你的输出要求。
  2. 递归成员:不断将子节点与父节点关联,子节点的根节点直接继承父节点的ID——如果父节点已经找到根,那这个ID就是最终的根节点。

完整SQL代码

WITH RECURSIVE node_roots AS (
    -- 锚点:根节点的Root为NULL
    SELECT ID, ParentId, NULL AS Root
    FROM tree_nodes
    WHERE ParentId IS NULL
    UNION ALL
    -- 递归:子节点关联父节点,Root取父节点的ID
    SELECT tn.ID, tn.ParentId, nr.ID AS Root
    FROM tree_nodes tn
    JOIN node_roots nr ON tn.ParentId = nr.ID
)
SELECT ID, Root
FROM node_roots
ORDER BY ID;

验证结果

把你的测试数据代入这个查询,得到的结果完全符合你的预期:

IDRoot
1NULL
21
37
41
57
67
7NULL

补充说明

  • 如果你的表名不是tree_nodes,记得替换成实际表名。
  • 递归CTE在Presto中默认递归深度是1000层,如果你的树形结构更深,可以通过调整配置参数query.max-recursion-depth来修改限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:43:11