Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да направя рекурсивната SELECT заявка в MySQL?

Редактиране

Решението, споменато от @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 за да работи това решение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Можете ли да добавите оператор if в ORDER BY?

  2. Управлявайте MySQL с phpMyAdmin на Ubuntu 9.10 (Karmic)

  3. MySQL ГРЕШКА 1290 (HY000) --secure-file-priv option

  4. Грешка в WordPress MySQL SQL заявка в клас WPDB

  5. Как да деактивирате стриктния режим на MySQL