【发布时间】:2011-11-26 00:45:43
【问题描述】:
使用 MySQL,我想从具有这样的字段结构的表中返回父列表。 ID,PARENTID,NAME(标准父子层次结构)。我想遍历“向上”树以返回所有“父母”的列表。
我意识到“嵌套集”可能是处理此问题的更好方法 - 但目前我无法更改数据的结构。我会考虑在未来这样做。目前 - 我的数据集实际上将包含几个级别的深度 - 没什么疯狂的......可能是 2-5,所以我的递归命中不应该“太昂贵”。
我已经查看了SQL Server get parent list 中提出的解决方案 - 但是这个语法在 mySQL 中很糟糕...
有没有人举例说明如何做到这一点?
@kevin - 谢谢链接 - 但我仍然得到错误。 ("每个派生表都必须有自己的别名")
这就是我所做的(修改文章上方的语法形式 - 以“适应”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”
【问题讨论】:
-
看到这个类似的问题:stackoverflow.com/questions/1382573/…
-
@Kevin 我认为它与这个问题没有任何关系。
-
@karolis - 它“有点”相关,我知道他指点我的地方..见上面的编辑...
-
@jpmyob 所以为那个表添加一个别名,例如
as my_alias。但是在任何情况下都不能为 MySQL 重写 SQL 服务器的查询,因为 MySQL 不支持递归子查询。如果您不想将查询限制在几个级别,那么您需要创建一个存储函数或过程。