sql - 使用 ROWNUM 在 Oracle 中获取质数记录

我正在尝试从我的表中获取所有编号为素数(行)的记录。有人可以阐明如何解决这个问题吗?

这是我的示例数据,如下所示。

EMPID EMPNAME
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J

要求的输出:

EMPID EMPNAME
2 B 
3 C
5 E
7 G

如果我有大量数据,我如何获得这样的输出而不是使用 IN 运算符?

最佳答案

Sieve of Eratosthenes

CREATE TABLE primes (
    num number PRIMARY KEY
);

INSERT INTO primes (num)
SELECT LEVEL + 1
FROM dual
CONNECT BY LEVEL < 1000;

DELETE FROM primes p1
WHERE EXISTS (
    SELECT NULL
    FROM primes p2
    WHERE p2.num < p1.num
    AND MOD(p1.num, p2.num) = 0
);

然后

SELECT emps.*
FROM emps
INNER JOIN primes ON primes.num = emps.EMPID;

或者

SELECT EMPID, EMPNAME
FROM (
    SELECT ROWNUM AS rn, emps.EMPID, emps.EMPNAME
    FROM emps
)
INNER JOIN primes ON primes.num = rn;

如果您不想计算素数,您可以从现有数据中添加它们:List of small primes

https://stackoverflow.com/questions/9915375/

相关文章:

php - 使用 sha256WithRSAEncryption 签名需要什么版本的 OpenSSL

php - 获取最近过去的星期六(上星期六)

fortran - 大型阵列导致 OpenMP 崩溃

iphone - 选择时 Xcode UITableView 行未突出显示

python - 从嵌套函数中的封闭范围访问变量

visual-studio - 将 tinyxml2 与 Visual Studio、Visual

C++ 问题 - getline 跳过第一个输入

r - 使用已经汇总的数据在 ggplot2 上生成条形图

c# - 使用 "new"初始化的 Fixed(){} 中的多个指针不起作用

wordpress - 使用帖子 ID 查询帖子