sql >> Database >  >> RDS >> Mysql

Hoe de recursieve SELECT-query in MySQL te doen?

Bewerken

Oplossing genoemd door @leftclickben is ook effectief. We kunnen hiervoor ook een opgeslagen procedure gebruiken.

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

We gebruiken een tijdelijke tabel om de resultaten van de uitvoer op te slaan en aangezien de tijdelijke tabellen op sessies zijn gebaseerd, zal er geen probleem zijn dat de uitvoergegevens onjuist zijn.

SQL FIDDLE Demo

Probeer deze zoekopdracht:

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 |

Opmerking
parent_id waarde moet kleiner zijn dan de child_id om deze oplossing te laten werken.



  1. CHECK-beperking in MySQL werkt niet

  2. Vind alle tabellen met kolom met gespecificeerde naam - MS SQL Server

  3. PL/SQL-opgeslagen procedures maken met parameters in Oracle Database?

  4. Geparametriseerde queries met psycopg2 / Python DB-API en PostgreSQL