sql - PostrgreSQL 中是否有等价的 connectby 可以按树向上?
问题描述
我正在学习如何在 postgresql12 中使用树,并找到了一个很好的函数 c onnectby
。
例如:
SELECT * FROM connectby('descriptor_value', 'descriptor_value_id',
'parent_value_id', '1', 0, '->')
给出以下输出:
但是,我不想从根开始构建所有树,我想从节点(性能)开始分支到根。例如,我想作为参数传递87
并获取1->86->87
。有这样的功能吗?
解决方案
这通常使用递归公用表表达式来完成。
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()
功能已经过时了
推荐阅读
- laravel - 在新的 laravel 文件中执行“npm run”时出错 - 找不到模块 npm-cli.js
- html - 使用 %userprofile% 的数据源 iMacro
- javascript - 使用 javascript SDK 从 facebook graph api 获取个人资料图片
- kubernetes - Kubernetes 仪表板(Web UI)不工作
- python - 用于迁移学习的 Keras input_tensor 形状
- java - Jsoup getElementsByAttributeValueMatching 不起作用
- c++ - 以两个 std::vector 和一个常量作为参数的 std::transform
- jquery - 如何使用 jquery 将 sidemenuTab 显示到当前选项卡中?
- angular - 产品的角度复选框过滤器
- android - 过滤正在上传的图像