编写查询语句输出≤指定值的所有质数,以&分隔单行打印
质数查询SQL语句实现
以下是两种适用于不同MySQL版本的查询语句,可输出所有小于等于指定值的质数,结果以&分隔为单行:
方式一:依赖预创建的数字表(兼容低版本MySQL)
SET @n = 10; -- 替换为你需要的指定数值 SELECT GROUP_CONCAT(p SEPARATOR '&') AS primes FROM ( SELECT t1.num AS p FROM ( SELECT 2 AS num UNION ALL SELECT num + 1 FROM numbers WHERE num <= @n - 1 ) t1 WHERE NOT EXISTS ( SELECT 1 FROM numbers t2 WHERE t2.num BETWEEN 2 AND SQRT(t1.num) AND t1.num % t2.num = 0 ) AND t1.num >= 2 ) primes_list;
- 需提前创建一个包含连续整数的
numbers表(至少覆盖到你要查询的最大值) - 通过
NOT EXISTS子句筛选出无除1和自身外因数的质数 - 用
GROUP_CONCAT将结果拼接为&分隔的单行
方式二:递归CTE生成序列(MySQL 8.0+适用)
SET @n = 10; -- 替换为目标数值 WITH RECURSIVE numbers AS ( SELECT 2 AS num UNION ALL SELECT num + 1 FROM numbers WHERE num < @n ), primes AS ( SELECT num FROM numbers n WHERE NOT EXISTS ( SELECT 1 FROM numbers m WHERE m.num <= SQRT(n.num) AND n.num % m.num = 0 ) ) SELECT GROUP_CONCAT(num SEPARATOR '&') AS primes FROM primes;
- 无需提前建表,用递归CTE自动生成从2到指定值的整数序列
- 逻辑与方式一一致,更适合高版本MySQL环境
当指定值为10时,两种方式的输出均为:2&3&5&7
内容的提问来源于stack exchange,提问作者Darshil Sakdecha
相关产品推荐
相关产品推荐

