首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL存储过程设计问题。执行还是层级?

MySQL存储过程设计问题。执行还是层级?
EN

Stack Overflow用户
提问于 2011-07-07 04:18:21
回答 1查看 194关注 0票数 1

假设我们有一个名为SMALLER的表,其中包含列num_1num_2,这两个列都是整型的,并且其中包含一些数据。

它看起来是这样的:

代码语言:javascript
复制
`num_1`  `num_2` 
    1        2
    2        3
    2        8
    3        4
    4        5
        .
        .
        .  Much much much more
        .  

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

代码语言:javascript
复制
`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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-07 04:28:29

一个不错的起点是:

代码语言:javascript
复制
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。即:

代码语言:javascript
复制
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;

为了回答您更新的问题,whiles不完全确定您是否指的是通过唯一行之间的关系进行连接(您需要两列来存储此关系,因此它将非常相似)。或者,如果您的意思是,您有一个包含所有数字的表,另一个包含第一个表的行之间关系的两列表。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6602416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档