使用 random() 的 SQLite 查询中的意外行为

Unexpected behavior in SQLite query using random()

SELECT random() as r from my_tbl where r < 0 LIMIT 10

returns 10 个数字,但有些是正数,这不是我所期望的。这是 SQLite 中的错误吗?

SELECT子句中的表达式是查询的输出,因此它们是行之后计算的被过滤了。 因此,SQL 标准禁止在查询的任何其他子句中使用输出别名(例如 r)。

SQLite 允许它无论如何,但效果并不总是你想要的。 AS 只是 重命名 一个输出列(即,它给表达式一个短名称),所以当你在 WHERE 子句中使用这样的别名时,你得到的不是输出列的 value,而是原始 expression 的副本。效果是一样的:

SELECT random() FROM my_tbl WHERE random() < 0 LIMIT 10;