MySQL 8.3 Release Notes
可以在查询的选择列表中使用别名来给列赋予不同的名称。您可以在 GROUP BY
、ORDER 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
子句中,但它引用了列值的别名,该别名直到行被选择和分组后才被确定。
在查询的选择列表中,可以使用标识符或字符串引用字符来指定带引号的列别名:
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';