【发布时间】:2016-09-11 02:52:42
【问题描述】:
我是 StackOverflow 的新手,遇到了一个打印 2 到 1000 的素数的查询。 如果这是最有效的编码方式,我使用了以下查询需要输入。
WITH NUM AS (
SELECT LEVEL N
FROM DUAL CONNECT BY LEVEL <= 1000
)
SELECT LISTAGG(B.N,'-') WITHIN GROUP(ORDER BY B.N) AS PRIMES
FROM (
SELECT N,
CASE WHEN EXISTS (
SELECT NULL
FROM NUM N_INNER
WHERE N_INNER .N > 1
AND N_INNER.N < NUM.N
AND MOD(NUM.N, N_INNER.N)=0
) THEN
'NO PRIME'
ELSE
'PRIME'
END IS_PRIME
FROM NUM
) B
WHERE B.IS_PRIME='PRIME'
AND B.N!=1;
我知道这个问题已经被问过多次,如果有的话,我请求更好的解决方案。更多关于它如何与 MySQL/MS SQL/PostgreSQL 一起工作的需要输入。
任何帮助都会让我更好地理解。
【问题讨论】:
-
您能详细说明您想要实现的目标吗?您提出的查询是
Oracle特定的。您是否需要其他 RDBMS 中的等价物或更好的算法来获得素数? -
是的,如果可以的话,我需要更好的算法。我能够获得在其他平台上编写查询的详细信息。
标签: mysql sql-server postgresql select subquery