gpt4 book ai didi

MySQL存储过程设计问题。递归还是层次结构?

转载 作者:行者123 更新时间:2023-11-30 23:37:01 24 4
gpt4 key购买 nike

假设我们有一个名为 SMALLER 的表, 列 num_1num_2 , 都是整型,里面还有一些数据。

看起来像这样:

`num_1`  `num_2` 
1 2
2 3
2 8
3 4
4 5
.
.
. Much much much more
.

我想做的是扩展这个表,然后收集所有“较小”的关系。这样,结果表应该如下所示:

`num_1`  `num_2` 
1 2
1 3
1 4
1 5
1 8
2 3
2 4
2 5
2 8
3 4
3 5
4 5

感谢所有帮助!

此外,如果不是“更小”的关系,这个表只有一个“连接”关系,例如,'1'连接到'2','2'连接到'3','2'连接到'4',这样我们就可以说 1-2、1-3、1-4、2-3、2-4。

最佳答案

一个好的起点是:

SELECT 
A.num_1, B.num_2
FROM
Smaller AS A JOIN Smaller AS B ON (A.num_1 < B.num_2)
ORDER BY A.num_1, B.num_2;

在您的存储过程中,将其放入游标中,遍历游标并为每一行执行 INSERT IGNORE。即:

DECLARE num1,num2 INT;
DECLARE done DEFAULT 0;
DECLARE mycursor CURSOR FOR SELECT # use the select above, im lazy here
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN mycursor;

my_loop: LOOP
FETCH mycursor INTO num1, num2;
IF done THEN
LEAVE my_loop;
END IF;
INSERT IGNORE INTO Smaller VALUES (num1,num2);
END LOOP;

要回答你更新的问题,虽然不能完全确定你的意思是通过唯一行之间的关系连接(你需要两列来存储这种关系,所以它会非常相似)。或者,如果您的意思是您有一个包含所有数字的表格,以及另一个包含第一个表格的行之间的关系的两列表。

或者,最后,如果您想要一个仅包含“1-2”、“1-3”等字符串的表。如果是这种情况,我会将其保留为两个单独的列,并使用 CONCAT 将它们输出为字符串当你轮询表格时:)

关于MySQL存储过程设计问题。递归还是层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6602416/

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