文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
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 子句中,但是它引用了在选择行并按 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';