Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara melakukan kueri SELECT Rekursif di MySQL?

Sunting

Solusi yang disebutkan oleh @leftclickben juga efektif. Kami juga dapat menggunakan prosedur tersimpan untuk hal yang sama.

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

Kami menggunakan tabel temp untuk menyimpan hasil output dan karena tabel temp berbasis sesi, kami tidak akan ada masalah terkait data output yang salah.

SQL FIDDLE Demo

Coba kueri ini:

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 |

Catatan
parent_id nilai harus kurang dari child_id agar solusi ini berhasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendeteksi bahwa transaksi telah dimulai?

  2. MySQL 8.0 - Klien tidak mendukung protokol otentikasi yang diminta oleh server; pertimbangkan untuk memutakhirkan klien MySQL

  3. Tabel Tunggal MySql, Pilih 7 hari terakhir dan sertakan baris kosong

  4. Ubah cap waktu Unix menjadi tanggal yang dapat dibaca manusia menggunakan MySQL

  5. Hapus Kueri Untuk Menghapus Baris di MySQL