Mysql
 sql >> Database >  >> RDS >> Mysql

Come eseguire la query SELECT ricorsiva in MySQL?

Modifica

Anche la soluzione menzionata da @leftclickben è efficace. Possiamo anche utilizzare una procedura memorizzata per lo stesso.

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

Stiamo utilizzando la tabella temporanea per memorizzare i risultati dell'output e poiché le tabelle temporanee sono basate sulla sessione, non ci saranno problemi relativi ai dati di output non corretti.

SQL FIDDLE Demo

Prova questa query:

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 |

Nota
parent_id il valore deve essere inferiore a child_id affinché questa soluzione funzioni.