使用MySQL,我想要从一个表中返回一个父级列表,该表具有以下字段结构:ID,PARENTID,NAME(标准的父子层次结构)。我想要遍历“向上”树来返回所有“父级”的列表。
我意识到,“嵌套集合”可能是更好的处理方式 - 但目前我无法更改数据结构。我将来会考虑这样做。目前-我的数据集实际上只包含几个深度级别-不会很复杂...也许是2-5,因此我的递归查询不应该太昂贵。
我已经查看了在SQL Server get parent list中提出的解决方案 - 但是这个语法在mysql中失败了...
有没有人有如何做到这一点的示例?
@kevin - 感谢链接 - 但我仍然遇到错误。(“每个派生表都必须有自己的别名”)
这是我所做的事情(修改了上面文章的语法以'适应' MySQL) - 我显然错过了什么...
我意识到,“嵌套集合”可能是更好的处理方式 - 但目前我无法更改数据结构。我将来会考虑这样做。目前-我的数据集实际上只包含几个深度级别-不会很复杂...也许是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"
as my_alias
。但无论如何,不可能将 SQL Server 的查询重写为 MySQL,因为 MySQL 不支持递归子查询。如果您不想将查询限制在几个级别之内,则需要创建存储函数或过程。 - Karolis