静态选择在哪里

时间:2015-05-12 14:22:40

标签: mysql

为什么这不能用于mysql?

SELECT true AS is_valid FROM users WHERE is_valid

我需要以这种方式编写它,因为我使用了一个生成查询的框架。

但是我得到了

Unknown column 'is_valid' in 'where clause'

2 个答案:

答案 0 :(得分:1)

您不能在where子句中使用别名,因为查询是从右到左解析的。因此,一旦从右边开始导致未知列错误,该列的别名就不可知。

来自MySql docs

  

"可以使用AS alias_name为select_expr提供别名。别名是   用作表达式的列名,可以在GROUP BY中使用,   ORDER BY或HAVING子句。"

答案 1 :(得分:0)

由于SELECT查询语义,您不能在WHERE子句中使用SELECT表达式的别名:首先它是表JOIN(此处不适用) ),然后它使用WHERE子句中的条件过滤行,之后它计算SELECT子句中的表达式,并且可选地,它为其中一些子句创建别名。 GROUP BY + HAVING的处理如下(如果存在),然后根据ORDER BY子句对结果行进行排序,最后使用LIMIT值(如果存在)仅向请求的客户端发送请求的行。