【发布时间】:2021-02-26 02:51:42
【问题描述】:
如果我运行以下查询:
WITH cte AS(SELECT random() AS rand)
SELECT rand,rand FROM cte;
值rand计算一次,结果中出现两次相同的值。
如果我用一张桌子运行它:
DROP TABLE IF EXISTS data;
CREATE TABLE data(n int);
INSERT INTO data(n) VALUES(1),(2),(3),(4),(5);
WITH cte AS(SELECT random() AS rand FROM data)
SELECT rand,rand FROM cte;
或者,如果您更喜欢递归 CTE:
WITH
data AS (SELECT 1 AS n UNION ALL SELECT 1+n FROM data WHERE n<5),
cte AS(SELECT random() AS rand FROM data)
SELECT rand,rand FROM cte;
…rand 的值会针对每个实例重新计算,因此结果集中的每一行都有两个不同的值。见http://sqlfiddle.com/#!5/73fd4/1
我预计random() 会为每一行重新计算,但我没想到rand 值会在 CTE 之后重新计算。
我认为这不是标准行为,而且肯定不是 PostgreSQL、SQL Server 和 MySQL 的工作方式。
如何让 SQLite 每次迭代只计算一次 rand 值?
【问题讨论】:
标签: sqlite random subquery common-table-expression