B.5.5.4 カラムエイリアスに関する問題

エイリアスをクエリーの選択リストに使用すると、カラムを別の名前にすることができます。GROUP BYORDER BY、または HAVING 句でエイリアスを使用して、カラムを参照できます。

SELECT SQRT(a*b) AS root FROM tbl_name
  GROUP BY root HAVING root > 0;
SELECT id, COUNT(*) AS cnt FROM tbl_name
  GROUP BY id HAVING cnt > 0;
SELECT id AS 'Customer identity' FROM tbl_name;

標準 SQL では、WHERE 句でのカラムエイリアスへの参照は許可されません。WHERE 句が評価されるときに、カラム値がまだ判別されていない場合があるため、この制限が課されています。たとえば、次のクエリーは不正です。

SELECT id, COUNT(*) AS cnt FROM tbl_name
  WHERE cnt > 0 GROUP BY id;

WHERE 句は GROUP BY 句に含められる行を判別しますが、行が選択されるまでわからないカラム値のエイリアスを参照して GROUP BY によってグループ化しています。


SELECT 1 AS `one`, 2 AS 'two';

ステートメント内のどこに指定する場合でも、エイリアスへの引用した参照には、識別子引用符を使用する必要があります。そうしないと、参照は文字列リテラルとして扱われます。たとえば、次のステートメントはカラム id の値によってグループ化され、エイリアス `a` を使用して参照されます。

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY `a`;

ただし、次のステートメントはリテラル文字列 'a' によってグループ化され、予期したとおりに動作しません。

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY 'a';

Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb
User Comments
  Posted by Alessandro Vesely on October 1, 2010
Quoted fields often result from difficulties in ordering by expressions that involve an alias. For example

SELECT group, SUM(x) AS a, SUM(y) AS b, SUM(x)+SUM(y) AS 'a+b'
FROM tbl_name GROUP BY group ORDER BY `a+b`;

The column 'a+b' is only necessary because one cannot order by a + b. Backslashes may be needed if the statement is submitted from a shell. Easier names, like sum_of_a_and_b, are much less immediate to a human reader.

Sign Up Login You must be logged in to post a comment.