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

Postgres递归CTE查询自关联表中指定节点的根节点ID

递归CTE查询指定节点的根节点ID

假设你的层级表结构如下(可根据实际字段名调整):

  • id: 节点唯一ID
  • name: 节点名称
  • parent_id: 父节点ID(根节点的parent_id为NULL或0)

实现SQL

WITH RECURSIVE location_hierarchy AS (
    -- 锚点成员:定位目标节点(这里是"布鲁克林")
    SELECT id, name, parent_id
    FROM locations
    WHERE name = '布鲁克林'
    
    UNION ALL
    
    -- 递归成员:向上遍历父节点
    SELECT l.id, l.name, l.parent_id
    FROM locations l
    JOIN location_hierarchy h ON l.id = h.parent_id
)
-- 筛选根节点并返回其ID
SELECT id AS root_id
FROM location_hierarchy
WHERE parent_id IS NULL;

关键说明

  • 过滤目标节点:在锚点成员的WHERE子句中直接指定name = '布鲁克林',就能精准定位起始节点。
  • 递归遍历逻辑:通过自连接不断向上追溯父节点,直到遍历到没有上层节点的根节点。
  • 仅返回根节点:最后通过parent_id IS NULL(如果你的根节点用0标识,就改成parent_id = 0)筛选出根节点,只取它的ID即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:13:09