Редактиране
Решението, споменато от @leftclickben, също е ефективно. Можем да използваме и съхранена процедура за същото.
СЪЗДАВАНЕ НА ПРОЦЕДУРА get_tree(IN id int) BEGIN DECLARE child_id int; DECLARE prev_id int; SET prev_id =id; SET child_id=0; ИЗБЕРЕТЕ col3 в child_id ОТ таблица1 КЪДЕ col1=id; създайте ВРЕМЕННА таблица АКО НЕ СЪЩЕСТВУВА temp_table като (изберете * от таблица1, където 1=0); съкращаване на таблица temp_table; WHILE child_id <> 0 ДА вмъкнете във temp_table select * от table1 WHERE col1=prev_id; SET prev_id =child_id; SET child_id=0; ИЗБЕРЕТЕ col3 в child_id ОТ ТАБЛИЦА1, КЪДЕТО col1=prev_id; КРАЙ ДОКОЕ; изберете * от temp_table; КРАЙ //
Използваме временна таблица за съхраняване на резултатите от изхода и тъй като временните таблици са базирани на сесия, няма да има проблем относно неправилните изходни данни.
SQL FIDDLE Демо
Опитайте тази заявка:
ИЗБЕРЕТЕ col1, col2, @pv :=col3 като 'col3' ОТ table1JOIN (SELECT @pv :=1) tmpWHERE col1 =@pv
SQL FIDDLE Демо
:
<предварителен код>| COL1 | COL2 | COL3 |+------+------+------+| 1 | а | 5 || 5 | г | 3 || 3 | k | 7 |
Забележка
идентификатор на_родител
стойността трябва да е по-малка отchild_id
за да работи това решение.