次のクエリが機能しないのはなぜですか?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'
次のクエリが機能しないのはなぜですか?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'
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;
GROUP BY句なしでのHAVING句の使用は、MySQLの非標準の拡張であり、他のデータベースでは機能しないことに注意してください。
これを移植可能にする場合は、派生テーブルを使用する必要があります。
選択する * から ( SELECT(x + y)AS z、t。* からt WHERE x = 1 )t2 WHERE z = 2
持つ句を使用する:
SELECT (x + y) AS z, t.* FROM t
WHERE
x = 1
having z=2