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

Sql 如何递归查找表中所有匹配的行?,sql,mariadb,Sql,Mariadb,我试图在不使用技巧的情况下与现有数据库进行争论。我需要在链接表中进行查询,以递归方式查找所有匹配的id 我尝试过许多嵌套联接查询,但我不是SQL专家。我是一名程序员,当我处理简单的数据库时,像这样复杂的查询对我来说是一场斗争 我的桌子看起来像这样: ------------------------ | child_id | parent_ id| ________________________ 2 16 3 16 4

我试图在不使用技巧的情况下与现有数据库进行争论。我需要在链接表中进行查询,以递归方式查找所有匹配的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
我只知道顶级父id。我想查找所有关联的子id

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

注意:此解决方案在MariaDB 10.2.2及更高版本中有效

尝试:


您使用的是哪种DBMS?我使用的是SQL mariadb。恐怕我知道答案,但您现在可能知道最大深度、级别数?从实际角度来看,级别数可能会减少到4左右,但理论上没有限制。谢谢。我看到了可能的复制品。上面的查询对我来说有一定的意义,但是当我尝试执行它时,会出现语法错误。1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,使用第行的“recursive ctechild_id,parent_id as select child_id,parent_id from man”1@DanGray,哪一个?@DanGray您使用的是哪一个版本的MariaDB?这里有一个。是的-我在5.7上,它不支持递归查询。升级到mariadb 10。现在效果很好。谢谢你!!
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;