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ơnchild_id
để giải pháp này hoạt động.