• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 列别名问题

    可以在查询选择列表中使用别名来为列指定其他名称。您可以在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使用别名引用的column值进行分组`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';