gpt4 book ai didi

mysql - 如何在 MySQL 中进行递归 SELECT 查询?

转载 作者:IT老高 更新时间:2023-10-28 12:52:20 26 4
gpt4 key购买 nike

我有一个下表:

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 the child_id for this solution to work.

关于mysql - 如何在 MySQL 中进行递归 SELECT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com