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

标签 sql 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

关于sql - 使用 ROWNUM 在 Oracle 中获取质数记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915375/

相关文章:

java - 如何从列元数据中确定列大小是以字节为单位还是以字符为单位?

sql - MSSQL 中 ISNULL() 的奇怪行为

php mysql sql select问题: syntax?结构?绑定(bind)?

sql - 计算两个日期时间之间的时间 - ActiveRecord/SQL/Heroku

mysql - Laravel MySQL 自动增量问题本地与远程

java - 从我的 Android 应用程序连接到 Oracle 数据库的步骤

sql - 重命名 SQL 列错误 : Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong

oracle - Weblogic 上的 Netflix OSS/Spring Cloud

sql - Oracle 优化 SQL 查询 - Multiple Max()

java - 更改序列 H2DB 的数据类型