【问题标题】:cte to get family tree in many to many relationshipcte 在多对多关系中获取家谱
【发布时间】:2022-08-09 18:33:10
【问题描述】:

我有一个名为 parents 的表和另一个名为 parents_rel 的表。这是一个多对多的关系,每个父母都有孩子,孩子也有孩子。我想使用 cte 来获取给定父母的家谱。 这是我的数据集:

父母

id name
1 bob
2 rick
3 ann
4 charles
5 carlos
6 maria

父母_rel

Parent_id Child_id
1 2
1 3
2 4
5 6

如果我想查看 bob(1) 的家谱,我的预期结果是:

id name
1 bob
2 rick
3 ann
4 charles

我正在使用 postgres,因此非常感谢 postres 中的示例。

    标签: sql postgresql common-table-expression


    【解决方案1】:

    这应该工作:

    WITH RECURSIVE CTE AS(
    SELECT id ParentId
      FROM Parents Parent
      WHERE Parent.Name = 'bob'
    UNION ALL
    SELECT Child_id
      FROM Parents_rel
      JOIN CTE ON Parents_rel.Parent_id = CTE.ParentId
    )
    SELECT ParentId id, name
    FROM CTE
    LEFT JOIN Parents ON Parents.Id = CTE.ParentId
    

    Try it online

    【讨论】:

    • 有趣的。我会在 recurvise 成员中加入Parents,但您的解决方案更简单。
    【解决方案2】:

    这就是我最终做的事情:

    WITH RECURSIVE n
    AS (
      SELECT p.* 
      FROM parents p  
      WHERE p.id  = "bob"
    UNION ALL
      SELECT p1.* 
      FROM (SELECT child_id FROM parents_rel pr INNER JOIN n ON pr.parent_id 
       = n.id) a
    INNER JOIN parents p1
     ON a.child_id = p1.id
    )
    SELECT * FROM n;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      相关资源
      最近更新 更多