如何递归查找表中所有匹配的行?

时间:2019-07-26 07:33:39

标签: sql mariadb

我试图在不借助技巧的情况下破坏现有数据库。我需要在链接表中查询,以递归查找所有匹配的ID。

我尝试了许多嵌套的联接查询,但是我不是SQL专家。我是一名程序员,当我使用简单的数据库时,像这样的复杂查询对我来说是一个难题。

我的桌子看起来像这样:

------------------------
| child_id | parent_ id|
________________________
    2           16
    3           16
    4           16 
    11          10
    12          11
    16          7
    17          10
    18          17
    19          7
    20          19
    21          10
    22          21
    23          22
    24          22
    26          20

我只知道顶级parent id。我想找到所有关联的子ID。

如果parent ID为7,我需要返回16,19,2,3,4,20,26。

1 个答案:

答案 0 :(得分:1)

注意::该解决方案将在MariaDB 10.2.2及更高版本中运行。

尝试Common Table Expression

with recursive cte(child_id, parent_id) as (
    select child_id, parent_id from MyTable
    where parent_id = 7    
       union all 
    select mt.child_id, mt.parent_id from MyTable mt
         inner join cte t on mt.parent_id = t.child_id
)
select * from cte;