首頁 > 資料庫 > mysql教程 > 為什麼我不能在 SQL 的 HAVING 子句中使用別名?

為什麼我不能在 SQL 的 HAVING 子句中使用別名?

Mary-Kate Olsen
發布: 2024-12-18 15:30:15
原創
1000 人瀏覽過

Why Can't I Use Aliases in SQL's HAVING Clause?

了解在HAVING 子句中使用別名的限制

在SQL 中,在HAVING 子句中使用別名進行聚合似乎很直觀。然而,由於 SQL 查詢的特定計算順序,這種方法會導致錯誤「無效的列名」。

要理解此限制,了解 SQL 如何執行查詢至關重要:

  1. 它首先透過組合 FROM 子句中指定的連結表中的所有行來建立結果集。
  2. WHERE 子句過濾掉符合下列條件的行:不符合其條件。
  3. 然後根據 GROUP BY 子句中指定的欄位對行進行分組。
  4. 重要的是,HAVING 子句在 SELECT 語句之前進行評估。 這表示 SQL 此時尚未辨識 SELECT 子句中定義的別名。
  5. 僅在評估 HAVING 子句之後SQL 是否繼續計算 SELECT 清單中的表達式。

因此,由於 HAVING 子句在 SELECT 子句之前計算,因此在 SELECT 語句中分配給聚合的別名(例如,「col7 ") 在計算 HAVING 表達式時 SQL 還不知道。因此,會出現錯誤「無效的列名‘col7’」。

相反,ORDER BY 子句在 SELECT 語句之後計算,允許使用 SELECT 子句中定義的別名。這是因為 ORDER BY 子句對 SELECT 語句所建立的結果集進行操作。

要解決此問題,請將 HAVING 子句中的別名替換為實際的聚合表達式,如下所示:

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3
登入後複製

以上是為什麼我不能在 SQL 的 HAVING 子句中使用別名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板