gpt4 book ai didi

sql - SQLite RANDOM()何时生成值?

转载 作者:行者123 更新时间:2023-12-03 17:46:53 31 4
gpt4 key购买 nike

我试图使用RANDOM()在SQLite中生成一组随机数,然后对随机变量进行一些操作。但是,我注意到随机数可能太随机了。

如果我生成一个随机数foo,然后执行诸如foo + 1的操作,则组成foo的随机数在两个步骤之间会有所不同。

举个例子:

create table example (row);
insert into example values ((1), (2), (3), (4), (5));
select rand_int, rand_int from (select random() as rand_int from example);


我希望两列的值都相同,因为它们都是 rand_int。但是,我得到以下信息:

rand_int            |rand_int
-5260381568243288466|-7496653829633048866
-8052390701785370463| 7419520968895340417
-4115751602452871973| 1327613517212963758
-349032467862864821| 8300157345288949689
-7986362792467963959|-5529549013375197694


SQLite是在运行子查询时存储 rand_int的随机绘制值,然后将其固定在子查询之外(这是我期望的行为),还是在每次需要变量时SQLite随机生成 rand_int的数据(这是我想看到的行为)?

最佳答案

每次调用random()时,SQLite都会恰好生成一个随机数。

但是,查询优化器将重新排列查询中的术语,因此您编写的内容不一定与实际执行的内容相同。

您可以exploit some SQLite internals to disable subquery flattening

select r, r from (select random() as r from example limit -1) limit -1;


或者,更明显的是,在对随机数进行计算之前,将它们存储在临时表中。

关于sql - SQLite RANDOM()何时生成值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075065/

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