Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wykonać rekurencyjne zapytanie SELECT w MySQL?

Edytuj

Rozwiązanie wspomniane przez @leftclickben jest również skuteczne. W tym celu możemy również użyć procedury składowanej.

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 //

Używamy tabeli tymczasowej do przechowywania wyników, a ponieważ tabele tymczasowe są oparte na sesjach, nie będzie problemu z nieprawidłowymi danymi wyjściowymi.

SQL FIDDLE Demo

Wypróbuj to zapytanie:

SELECT 
    col1, col2, @pv := col3 as 'col3' 
FROM 
    table1
JOIN 
    (SELECT @pv := 1) tmp
WHERE 
    col1 = @pv

SQL FIDDLE Demo :

| COL1 | COL2 | COL3 |
+------+------+------+
|    1 |    a |    5 |
|    5 |    d |    3 |
|    3 |    k |    7 |

Uwaga
parent_id wartość powinna być mniejsza niż child_id aby to rozwiązanie zadziałało.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę wykonać wiele zapytań oddzielonych średnikami za pomocą MySQL Connector/J?

  2. Jak sprawdzić stan serwera w MySQL Workbench za pomocą GUI

  3. Zapytanie MySQL uwzględniające wielkość liter

  4. Najlepsze praktyki w skalowaniu baz danych:część 1

  5. Jak uzyskać numer_wiersza w MySQL?