我试图通过加入另一个表来获取孩子的所有相关祖先的更多信息。 我对后端有点陌生,所以递归 cte 很难理解。
我拥有的数据:product_id,user_id
我需要的数据:
用户ID | master_id | 成本 |
---|---|---|
id(约翰_斯诺) | 空 | 4 |
id(麸皮斯塔克) | id(约翰_斯诺) | 6 |
id(arya_stark) | id(麸皮斯塔克) | 8 |
id(sansa_stark) | id(arya_stark) | 10 |
这样我就可以为各自的用户增加利润,并以最小的成本作为公司利润。
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