过滤mysql中的别名

时间:2010-11-27 09:09:15

标签: mysql sql mysql-error-1054

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

SELECT x + y AS z, t.*  FROM t
WHERE 
x = 1 and
z = 2

我得到的错误是:

Error Code : 1054
Unknown column 'z' in 'where clause'

3 个答案:

答案 0 :(得分: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;

试试这个,而不是:

SELECT x + y AS z, t.* FROM t WHERE x = 1 HAVING z = 2;

答案 1 :(得分:3)

您应该知道,没有 GROUP BY子句的HAVING子句的使用是MySQL的非标准扩展,并且在其他数据库中不起作用。

如果您希望它是可移植的,则需要使用派生表:

SELECT *
FROM (
  SELECT (x + y) AS z, t.*  
  FROM t
  WHERE x = 1 
) t2
WHERE z = 2

答案 2 :(得分:0)

使用having子句:

SELECT (x + y) AS z, t.*  FROM t
WHERE 
x = 1 
having z=2