我正试图通过加入另一个表来获得一个孩子的所有相关祖先的更多信息。我对后端有点陌生,所以递归cte很难理解。
在此处查找SQL Fiddle
我拥有的数据:product_id,user_id
我需要的数据:
user_id | master_id | 成本|
---|---|---|
id(john_snow( | null | 4|
id(bran_stark( | id(john_snow( | 6 |
id(arya_stak( | id(bran_stark( | 8 |
id(sansa_stark( | id(arya_star( | 10 |
您正在寻找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