假设我们有一个名为SMALLER的表,其中包含列num_1和num_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。
发布于 2011-07-07 04:28:29
一个不错的起点是:
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;为了回答您更新的问题,whiles不完全确定您是否指的是通过唯一行之间的关系进行连接(您需要两列来存储此关系,因此它将非常相似)。或者,如果您的意思是,您有一个包含所有数字的表,另一个包含第一个表的行之间关系的两列表。
或者,最后,如果您想要一个只包含带有"1-2“、"1-3”等字符串的表。如果是这种情况,我会将其保留为两个单独的列,并在轮询该表时使用CONCAT将它们作为字符串输出:)
https://stackoverflow.com/questions/6602416
复制相似问题