为什么以下查询无效? 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'
答案 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