Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


B.3.4.4 列别名问题

别名可以在查询的选择列表中使用,以给列指定一个不同的名称。您可以在GROUP BYORDER BYHAVING子句中使用别名,以引用列:

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子句中的行,但是它引用了列别名的值,这个值直到行被选择和分组后才确定。

在查询的选择列表中,可以使用标识符或字符串引号指定带引号的列别名:

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';