我有一张表示家谱的表。它包含字段ID
,NAME
,LEVEL
,PARENT_ID
。
列PARENT_ID
是外键,并引用此表的列ID
。如何获取所有列表(层次结构底部的任何级别)孩子只知道特定人员行的ID
?
我需要在不使用存储过程调用的情况下在单个查询中获取它。请帮助最好。
例如,如果ID
为7,则结果应为:
我使用的是MySQL-5.1。
编辑:如果原始问题没有解决方案,当最高级别等于5时可能有解决方案吗?
答案 0 :(得分:1)
编辑:不是一个完整的解决方案。执行技巧只遵循许多分支中的一个,并且无法提供多个孙分支。每评论。在SQLFiddle的结果中也可以看到。
因此,SQLFiddle处的解决方案说明了MySQL中可以利用的一个有趣的执行攻击。
SELECT
@parent_id := id AS id,
parent_id,
name,
level,
@depth := @depth + 1 AS depth
FROM
family_tree t
join (SELECT @parent_id := 7, @depth := 0) f
WHERE id = @parent_id or parent_id = @parent_id ;
基本上,将@parent_id变量声明为您开始的根。连接子查询仅执行一次。然后,当每一行重新定义@parent_id时,重新评估where子句,并返回一个新行,重新定义@parent_id,循环继续,直到没有更多行为止。