Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment faire la requête SELECT récursive dans MySQL ?

Modifier

La solution mentionnée par @leftclickben est également efficace. Nous pouvons également utiliser une procédure stockée pour la même chose.

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

Nous utilisons une table temporaire pour stocker les résultats de la sortie et comme les tables temporaires sont basées sur la session, il n'y aura pas de problème concernant les données de sortie incorrectes.

SQL FIDDLE Demo

Essayez cette requête :

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 |

Remarque
parent_id la valeur doit être inférieure à child_id pour que cette solution fonctionne.