SELECT random() as r from my_tbl where r < 0 LIMIT 10
返回10个数字,但有些是正数,这不是我所期望的。这是SQLite中的错误吗?
答案 0 :(得分:0)
SELECT子句中的表达式是查询的输出,因此在过滤行之后计算它们。
因此,SQL标准禁止在查询的任何其他子句中使用输出别名(例如r
)。
AS
只是重命名一个输出列(即,它给表达式一个简短的名称),所以当你在WHERE子句中使用这样的别名时,得到的不是输出列的值,但是原始表达式的副本。效果与:相同
SELECT random() FROM my_tbl WHERE random() < 0 LIMIT 10;