5

次のクエリが機能しないのはなぜですか?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'
4

3 に答える 3

12

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;
于 2010-11-27T09:17:47.553 に答える
4

GROUP BY句なしでのHAVING句の使用は、MySQLの非標準の拡張であり、他のデータベースでは機能しないことに注意してください。

これを移植可能にする場合は、派生テーブルを使用する必要があります。

選択する *
から (
  SELECT(x + y)AS z、t。*  
  からt
  WHERE x = 1
)t2
WHERE z = 2
于 2010-11-27T10:17:37.417 に答える
0

持つ句を使用する:

SELECT (x + y) AS z, t.*  FROM t
WHERE 
x = 1 
having z=2
于 2010-11-27T09:24:15.237 に答える