MySQL WHERE 子句:別名限制
MySQL 允許對列使用別名以提高可讀性並在查詢中建立新表達式。 但是,直接在 WHERE
子句中使用別名通常會導致「未知列」錯誤。這是因為 WHERE
子句在分配 別名之前過濾 行。
解決方法:
一種解決方案涉及使用 HAVING
子句。 與 WHERE
不同,HAVING
在 分組和聚合之後操作 ,允許引用在查詢中建立的別名:
<code class="language-sql">SELECT *, AVG(rev_rating) AS avg_rating FROM reviews GROUP BY rev_id HAVING avg_rating > 5;</code>
這裡,avg_rating
在 HAVING
中被正確引用。
要在 WHERE
子句中實現類似的過濾,必須將別名替換為其完整表達式:
<code class="language-sql">SELECT * FROM reviews WHERE (SUM(reviews.rev_rating) / COUNT(reviews.rev_id)) > 5;</code>
重要注意事項:
WHERE
子句不支援所有表達式,特別是別名中使用的 SUM()
或 AVG()
等聚合函數。 在這種情況下,HAVING
是必不可少的。
如 MySQL 文件所解釋的,不允許在 WHERE
中引用列別名,因為在 WHERE
子句執行時可能無法計算它們的值。
以上是我可以在 MySQL 的 WHERE 子句中使用別名嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!