gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:27:49 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/34731377/

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