首页 > 解决方案 > PostrgreSQL 中是否有等价的 connectby 可以按树向上?

问题描述

我正在学习如何在 postgresql12 中使用树,并找到了一个很好的函数 c onnectby

例如:

SELECT * FROM connectby('descriptor_value', 'descriptor_value_id', 
    'parent_value_id', '1', 0, '->') 

给出以下输出:

在此处输入图像描述

但是,我不想从根开始构建所有树,我想从节点(性能)开始分支到根。例如,我想作为参数传递87并获取1->86->87。有这样的功能吗?

标签: sqlpostgresqlcommon-table-expressionhierarchical-datarecursive-query

解决方案


这通常使用递归公用表表达式来完成。

with recursive cte as (
  select descriptor_value_id, parent_value_id, 1 as level
  from descriptor_value
  where descriptor_value_id = 87
  union all
  select p.descriptor_value_id, p.parent_value_id, c.level + 1
  from descriptor_value p 
    join cte c on c.parent_value_id = p.descriptor_value_id
)
select * 
from cte;

自从在 Postgres 8.4 中引入递归 CTE 以来,该connectby()功能已经过时了


推荐阅读