编辑
@leftclickben提到的解决方案也是有效的。我们也可以对它使用存储过程。
CREATE PROCEDURE get_tree(IN id int) BEGIN DECLARE child_id int; DECLARE prev_id int; SET prev_id = id; SET child_id=0; SELECt col3 into child_id FROM table1 WHERe col1=id ; create TEMPORARY table IF NOT EXISTS temp_table as (select * from table1 where 1=0); truncate table temp_table; WHILE child_id <> 0 DO insert into temp_table select * from table1 WHERe col1=prev_id; SET prev_id = child_id; SET child_id=0; SELECt col3 into child_id FROM TABLE1 WHERe col1=prev_id; END WHILE; select * from temp_table; END //
我们使用临时表存储输出结果,并且由于临时表是基于会话的,因此不会有关于输出数据不正确的任何问题。
SQL FIDDLE Demo
试试这个查询:
SELECt col1, col2, @pv := col3 as 'col3' FROM table1JOIN (SELECT @pv := 1) tmpWHERe col1 = @pv
**[
SQL FIDDLE Demo](http://sqlfiddle.com/#!2/9635d2/1)**
:
| COL1 | COL2 | COL3 |+------+------+------+| 1 | a | 5 || 5 | d | 3 || 3 | k | 7 |
注释
parent_id值应小child_id于此解决方案的。



