Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como fazer a consulta SELECT recursiva no MySQL?


Editar

A solução mencionada por @leftclickben também é eficaz. Também podemos usar um procedimento armazenado para o mesmo.
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 //

Estamos usando a tabela temporária para armazenar os resultados da saída e, como as tabelas temporárias são baseadas em sessão, não haverá nenhum problema em relação aos dados de saída incorretos.

SQL FIDDLE Demo

Tente esta consulta:
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 |



Observação
parent_id o valor deve ser menor que o child_id para que esta solução funcione.