获取Mysql中超级父级的所有子ID

时间:2014-05-14 09:43:38

标签: mysql sql

我有以下数据表。

id|child
1|2
1|3
1|4
2|6
2|7
3|9
6|10
6|11
17|18
19|20
18|19

我需要获取如下数据。即一个id的所有子关系的超父母(比如这里1和19)。

这里我已经选择了所有孩子的超级父ID“1”

的递归
id|all_child_id
1|2,3,4,6,7,9,10,11

在这里,我想选择所有超级父ID为'17'的孩子。

id|all_child_id
17|18,19,20

我不知道如何在sql中编写递归查询。

请不要让我创建中间表。

2 个答案:

答案 0 :(得分:0)

这里需要你在MySQL中规避递归查询的内容称为"嵌套集模型" (参见章节"嵌套集模型"例如here

您可以找到实施示例here

我一直在寻找更好的教程页面但到目前为止还找不到。但我确定它们存在。因此,如果有人有更好的链接,请在此处提供评论。谢谢!

编辑:This是我之前寻找的教程,但遗憾的是它是用德语写的。如果您决定并且能够更改数据模型以适合嵌套集,那么SQL片段仍然可以帮助您。

答案 1 :(得分:0)

这将有助于获得父母的所有孩子

   declare @parent_id as int;
    set @parent_id =  1;

    WITH RecursiveTable (SR_NO, parent_id,name, Level)
    AS
    (    
        SELECT      MaintTab.SR_NO, 
                    MaintTab.parent_id, 
                    MaintTab.name,
                    0 AS Level
        FROM Product_Master_Final AS MaintTab
        WHERE parent_id = @parent_id

        UNION ALL

        SELECT  MaintTab.SR_NO, 
                    MaintTab.parent_id, 
                    MaintTab.name ,
                    LEVEL + 1
        FROM Product_Master_Final AS MaintTab
            INNER JOIN RecursiveTable Rtab ON
            MaintTab.parent_id = Rtab.SR_NO
    )
    SELECT * FROM RecursiveTable