gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:44:28 24 4
gpt4 key购买 nike

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

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com