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

Hvordan laver man den rekursive SELECT-forespørgsel i MySQL?

Rediger

Løsningen nævnt af @leftclickben er også effektiv. Vi kan også bruge en lagret procedure til det samme.

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

Vi bruger temp-tabel til at gemme resultater af output, og da temp-tabellerne er sessionsbaserede, vil der ikke være noget problem med, at outputdata er forkerte.

SQL FIDDLE Demo

Prøv denne forespørgsel:

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 |

Bemærk
parent_id værdi skal være mindre end child_id for at denne løsning virker.



  1. ORA-12728:ugyldigt område i regulære udtryk

  2. Sådan dropper du database ved at bruge TSQL og GUI - SQL Server / TSQL Tutorial Del 25

  3. Flet overlappende datointervaller

  4. Find ud af, om et objekt er en fremmednøgle med OBJECTPROPERTY() i SQL Server