Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để thực hiện truy vấn SELECT đệ quy trong MySQL?

Chỉnh sửa

Giải pháp được đề cập bởi @leftclickben cũng có hiệu quả. Chúng tôi cũng có thể sử dụng một quy trình được lưu trữ cho tương tự.

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

Chúng tôi đang sử dụng bảng tạm thời để lưu trữ kết quả của đầu ra và vì bảng tạm thời dựa trên phiên, chúng tôi sẽ không có bất kỳ vấn đề nào liên quan đến dữ liệu đầu ra không chính xác.

SQL FIDDLE Demo

Hãy thử truy vấn sau:

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 |

Lưu ý
parent_id giá trị phải nhỏ hơn child_id để giải pháp này hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào tôi có thể sử dụng PDO để tìm nạp một mảng kết quả trong PHP?

  2. Cách xóa người dùng cơ sở dữ liệu MySQL trong cPanel

  3. Cài đặt Mtop (Giám sát máy chủ cơ sở dữ liệu MySQL) trong RHEL / CentOS 6/5/4, Fedora 17-12

  4. Các lựa chọn thay thế MySQL Workbench - Quản lý cấu hình ClusterControl

  5. Thực hiện các phép tính trong MySQL và PHP