gpt4 book ai didi

mysql - 用于查找素数的sql查询

转载 作者:行者123 更新时间:2023-11-29 11:18:29 24 4
gpt4 key购买 nike

假设我的表格中有从 1 到 100 的数字。我需要编写一个查询来从该表中提取所有素数。如何通过非常基本且简单的查询来实现此目的,而不使用任何类型的过程或循环。

最佳答案

选择 MyISAM 是有原因的。我会在评论中解释。主要是为了保证在自插入期间没有 innodb 间隙异常(从而摆脱 id)。不要过多地研究它的模式部分。我只需要生成一个从 1 到 100 的表。

对于MyISAM,它不会受到INNODB间隙异常的影响ref1 ref2它保证在自插入和 INNODB 间隙范围期间不会出现从 1 到 100 的间隙。

无论如何,如果您提供了实际的表格,我就不需要提及这一点。或者 ALTER TABLE 可以在数据加载后更改引擎。

架构

create table nums
( id int auto_increment primary key,
thing char(1) null
)ENGINE=MyISAM;

insert nums(thing) values(null),(null),(null),(null),(null),(null),(null);
insert nums(thing) select thing from nums;
insert nums(thing) select thing from nums;
insert nums(thing) select thing from nums;
insert nums(thing) select thing from nums;
select count(*) from nums; -- 112
delete from nums where id>100;
select min(id),max(id),count(*) from nums;
-- 1 100 100

查询

select id from nums where id>1 and id not in 
( select distinct n2id
from
( select n1.id as n1id, n2.id as n2id
from nums n1
cross join nums n2
where n1.id<(n2.id) and n1.id>1 and (n2.id MOD n1.id = 0)
) xDerived
)
order by id;

结果

+----+
| id |
+----+
| 2 |
| 3 |
| 5 |
| 7 |
| 11 |
| 13 |
| 17 |
| 19 |
| 23 |
| 29 |
| 31 |
| 37 |
| 41 |
| 43 |
| 47 |
| 53 |
| 59 |
| 61 |
| 67 |
| 71 |
| 73 |
| 79 |
| 83 |
| 89 |
| 97 |
+----+
25 rows in set (0.00 sec)

注意,上面的ref2是一个夸张的“快速创建一个470万行的表”,如果不这样做肯定会造成INNODB id间隙。这只是该引擎的已知事实。

关于mysql - 用于查找素数的sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39362357/

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