我正在尝试从我的表中获取所有编号为素数(行)的记录。有人可以阐明如何解决这个问题吗?
这是我的示例数据,如下所示。
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 运算符?
最佳答案
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/