文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (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 子句中的行,但它引用了在选择行并按 GROUP BY 分组之前未知的列值的别名。

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

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

在语句的其他位置,对别名的带引号的引用必须使用标识符引号,否则该引用将被视为字符串文字。例如,此语句按使用别名 `a` 引用的列 id 中的值进行分组:

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