在postgres递归查询中获取子级的所有祖先



我正试图通过加入另一个表来获得一个孩子的所有相关祖先的更多信息。我对后端有点陌生,所以递归cte很难理解。

在此处查找SQL Fiddle

我拥有的数据:product_id,user_id

我需要的数据:

成本4
user_id master_id
id(john_snow( null
id(bran_stark( id(john_snow( 6
id(arya_stak( id(bran_stark( 8
id(sansa_stark( id(arya_star( 10

您正在寻找RECURSIVECTE。乍一看可能会让人困惑,但经过一点练习,它就变得不言自明了。最终,它只是一个具有略微不同查询的UNION

WITH RECURSIVE get_ancestor(child,parent,cost) AS (
SELECT r.user_id,r.parent_id,c.cost FROM user_relation r
JOIN product_cost c ON c.user_id = r.user_id
UNION 
SELECT g.child,g.parent,c.cost FROM get_ancestor g
JOIN user_relation r ON r.user_id = g.child
JOIN product_cost c ON c.user_id = r.user_id 
)
SELECT * FROM get_ancestor;

演示:SQL Fiddle

相关内容

  • 没有找到相关文章

最新更新