0

我有一张代表家谱的表格。它有字段ID, NAME, LEVEL, PARENT_ID

在此处输入图像描述

该列PARENT_ID是外键,引用ID该表的列。如何获取 仅知道特定人员行的所有(层次结构底部的任何级别)儿童的列表?ID

sqlfiddle.com

我需要在不使用存储过程调用的情况下在单个查询中获取它。请帮助把它做得最好。

例如,如果ID是 7,那么结果应该是:

在此处输入图像描述

我使用 MySQL-5.1。

编辑:如果原始问题没有解决,也许当最高级别等于 5 时有解决方案?

4

1 回答 1

2

编辑:不是一个完整的解决方案。执行技巧只遵循多个分支之一,并且无法交付多个孙分支。根据评论。在 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,循环继续,直到没有更多的行。

于 2014-06-16T17:17:14.167 回答