文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙尺寸) - 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';