列别名问题
可以在查询选择列表中使用别名来为列指定其他名称。您可以在GROUP BY
,ORDER BY
或HAVING
子句中使用别名来引用该列:
SELECT SQRT(a*b)AS rootFROM tbl_nameGROUP BY rootHAVING root > 0;SELECT id, COUNT(*)AS cntFROM tbl_nameGROUP BY idHAVING cnt > 0;SELECT idAS 'Customer identity'FROM tbl_name;
标准SQL不允许在WHERE
子句中引用列别名。施加此限制是因为在WHERE
评估该子句时,可能尚未确定列值。例如,以下查询是非法的:
SELECT id, COUNT(*)AS cntFROM tbl_nameWHERE cnt > 0GROUP BY id;
该WHERE
子句确定应在GROUP BY
子句中包括哪些行,但它引用的是列值的别名,该别名直到选择了行并按分组后才知道GROUP BY
。
在查询的选择列表中,可以使用标识符或字符串引号指定带引号的列别名:
SELECT 1AS `one `, 2AS 'two';
在语句的其他地方,带引号的别名引用必须使用标识符引号,否则该引用将被视为字符串文字。例如,此语句按id
使用别名引用的column值进行分组`a`
:
SELECT idAS 'a', COUNT(*)AS cntFROM tbl_nameGROUP BY `a`;
但是此语句按文字字符串分组'a'
,将无法按预期工作:
SELECT idAS 'a', COUNT(*)AS cntFROM tbl_nameGROUP BY 'a';