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

时间:2015-09-11 19:03:39

标签: sqlite function random deterministic

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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