我得到了下表:
col1 | col2 | col3
-----+------+-------
1 | a | 5
5 | d | 3
3 | k | 7
6 | o | 2
2 | 0 | 8
如果用户搜索“1”,程序将查找包含“1”的 col1
,然后在 col3
中获取值“5”,那么程序将继续在col1
中搜索“5”,并在col3
中找到“3”,依此类推。所以它会打印出:
1 | a | 5
5 | d | 3
3 | k | 7
如果用户搜索“6”,则会打印出:
6 | o | 2
2 | 0 | 8
如何构建 SELECT
查询来执行此操作?
最佳答案
编辑
@leftclickben提到的解决方案也有效。 我们还可以使用存储过程来实现相同的目的。
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 //
我们使用临时表来存储输出结果,并且由于临时表是基于 session 的,因此不会出现任何有关输出数据不正确的问题。
<强> SQL FIDDLE Demo
<罢工>
试试这个查询:
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 |
罢工><罢工>罢工>
Note
parent_id
value should be less than thechild_id
for this solution to work.
关于mysql - 如何在 MySQL 中进行递归 SELECT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267320/