使用 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;
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;