一尘不染

获取递归父列表

mysql

使用MySQL,我想从具有此类字段结构的表中返回父母列表。ID,PARENTID,NAME(标准的父子层次结构)。我想遍历树以返回所有“父母”的列表。

我意识到“嵌套集”可能是处理此问题的更好方法-但目前我无法更改数据的结构。我将来会希望这样做。当前-我的数据集实际上将包含一些深度级别-
没什么疯狂的……也许2-5,所以我的递归命中不应太“昂贵”。

我已经看过SQL Server获取父级列表中提出的解决方案-但这是mySQL中的语法炸弹…

有没有人举过一个例子?

@kevin-链接的thx-但我仍然收到错误。(“每个派生表必须具有它自己的别名”)

这就是我所做的(上面文章的语法修改形式-为了适应MySQL)-我显然错过了一些东西…

SELECT parents.*
FROM  (
    SELECT taskID,  task,  parentID,  0 as level
    FROM   tasks
    WHERE taskidID = 9147
    UNION ALL
    SELECT  taskID, task,  parentID,  Level + 1 
    FROM   tasks
    WHERE  taskID = (SELECT parentID FROM parents ORDER BY level DESC LIMIT 1)
    )

想法???

例:

ID      PARENTID    NAME
9146    0       thing1
9147    0       thing2
9148    9146        thing3
9149    9148        thing4
9150    0       thing5
9151    9149        thing6

查询“ thing3”的父级返回“ 9148,9146”

查询“ thing6”的父级返回“ 9149,9148,9146,0”


阅读 226

收藏
2020-05-17

共1个答案

一尘不染

在此示例中,我们正在检查5个级别:

select 
    t1.parentid, t2.parentid, t3.parentid, t4.parentid, t5.parentid
from
    tableName t1
    left join tableName t2 on t1.parentid = t2.id
    left join tableName t3 on t2.parentid = t3.id
    left join tableName t4 on t3.parentid = t4.id
    left join tableName t5 on t4.parentid = t5.id
where
    t1.name = 'thing3'
2020-05-17