Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie mache ich die rekursive SELECT-Abfrage in MySQL?

Bearbeiten

Die von @leftclickben erwähnte Lösung ist ebenfalls wirksam. Wir können dafür auch eine gespeicherte Prozedur verwenden.

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

Wir verwenden temporäre Tabellen, um die Ergebnisse der Ausgabe zu speichern, und da die temporären Tabellen sitzungsbasiert sind, wird es keine Probleme mit fehlerhaften Ausgabedaten geben.

SQL FIDDLE Demo

Versuchen Sie diese Abfrage:

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 |

Hinweis
parent_id Der Wert sollte kleiner sein als die child_id damit diese Lösung funktioniert.