Postgresql递归自联接

Postgresql递归自联接,第1张

概述我在postgres中的表如下所示,表存储了ID之间的一种链式关系,我想要一个可以产生结果的查询,如“vc1” – > “rc7”或“vc3” – >“rc7”,我只会查询第一列ID1中的ID ID1 ID2"vc1" "vc2""vc2" "vc3""vc3" "vc4""vc4" "rc7" 所以我想在这里提供一些“头”ID,我必须获取尾部(链中的最后一个)id 我在postgres中的表如下所示,表存储了ID之间的一种链式关系,我想要一个可以产生结果的查询,如“vc1” – > “rc7”或“vc3” – >“rc7”,我只会查询第一列ID1中的ID
ID1     ID2"vc1"   "vc2""vc2"   "vc3""vc3"   "vc4""vc4"   "rc7"

所以我想在这里提供一些“头”ID,我必须获取尾部(链中的最后一个)ID.

这是使用递归CTE的sql:
with recursive tr(ID1,ID2,level) as (      select t.ID1,t.ID2,1 as level      from t union all      select t.ID1,tr.ID2,tr.level + 1      from t join           tr           on t.ID2 = tr.ID1     )select *from (select tr.*,max(level) over (partition by ID1) as maxlevel      from tr     ) trwhere level = maxlevel;

Here是sqlfiddle

总结

以上是内存溢出为你收集整理的Postgresql递归自联接全部内容,希望文章能够帮你解决Postgresql递归自联接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1164459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存