文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


B.3.4.4 欄位別名問題

別名可以在查詢的 select 清單中使用,為欄位提供不同的名稱。您可以在 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 清單中,可以使用識別碼或字串引號指定加上引號的欄位別名

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