过滤mysql中的别名

rip*_*234 2 mysql sql mysql-error-1054

为什么以下查询无效?Mysql抱怨z - 我不能在WHERE子句中使用别名吗?

SELECT x + y AS z, t.*  FROM t
WHERE 
x = 1 and
z = 2
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Error Code : 1054
Unknown column 'z' in 'where clause'
Run Code Online (Sandbox Code Playgroud)

NSS*_*Sec 9

http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

标准SQL不允许在WHERE子句中引用列别名.强制执行此限制是因为在评估WHERE子句时,可能尚未确定列值.例如,以下查询是非法的:

SELECT id, COUNT(*) AS cnt FROM tbl_name WHERE cnt > 0 GROUP BY id;
Run Code Online (Sandbox Code Playgroud)

试试这个,相反:

SELECT x + y AS z, t.* FROM t WHERE x = 1 HAVING z = 2;
Run Code Online (Sandbox Code Playgroud)

  • HAVING 子句将让 MySQL 对查询结果(包括任何聚合结果)进行第二次过滤,然后只保留与 HAVING 子句匹配的结果。 (2认同)