没有循环的版本怎么样?
CREATE PROCEDURE test(IN _first INT, _second INT)
SELECT CONCAT('Common factors of ', LEAST(_first, _second), ' and ', GREATEST(_first, _second), ': ', GROUP_CONCAT(n)) result
FROM
(
SELECT n
FROM
(
SELECT a.N + b.N * 10 + c.N * 100 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
ORDER BY n
) n
WHERE n <= LEAST(_first, _second)
HAVING _first MOD n = 0
AND _second MOD n = 0
) q;
用法:
mysql> CALL 测试(10, 20);
+----------------------------------------------------+
| 结果 |
+----------------------------------------------------+
| 10 和 20 的公因数:1,2,5,10 |
+----------------------------------------------------+
一组中的 1 行(0.00 秒)
查询正常,0 行受影响(0.00 秒)
mysql> 调用测试(800, 1000);
+-------------------------------------------------- -----------------+
| 结果 |
+-------------------------------------------------- -----------------+
| 800和1000的公因数:1,2,4,5,8,10,20,25,40,50,100,200 |
+-------------------------------------------------- -----------------+
一组中的 1 行(0.01 秒)
查询正常,0 行受影响(0.01 秒)
这是SQLFiddle演示