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

问题描述 投票:0回答:1

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

在此处查找 SQL Fiddle

我拥有的数据:product_id,user_id

我需要的数据:

用户ID master_id 成本
id(约翰_斯诺) 4
id(麸皮斯塔克) id(约翰_斯诺) 6
id(arya_stark) id(麸皮斯塔克) 8
id(sansa_stark) id(arya_stark) 10

这样我就可以为各自的用户增加利润,并以最小的成本作为公司利润。

sql postgresql common-table-expression recursive-query
1个回答
2
投票

A

RECURSIVE
CTE 正是您所寻找的。乍一看可能会令人困惑,但经过一些练习后,它就会变得不言自明。最后,它只是一个
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

© www.soinside.com 2019 - 2024. All rights reserved.