HAVING 子句可以在沒有 GROUP BY 子句的情況下使用嗎?
SQL 標準概述了使用 HAVING 子句的具體標準,其中包括引用功能上依賴 GROUP BY 子句或外部引用的欄位。然而,所提供的查詢提出了是否可以在沒有 GROUP BY 的情況下使用 HAVING 的問題。
標準 SQL 規範
依標準,不帶 GROUP BY 的 HAVING 子句沒有明確禁止 GROUP BY 子句。但是,此查詢表現出可疑的行為:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
此查詢在 HAVING 子句中使用聚合函數 (MAX),但它不指示應選擇哪個特定行。因此,它的行為並沒有嚴格地由標準定義。
MySQL 實作
MySQL 將此查詢解釋為好像存在隱式 GROUP BY 子句,僅選擇行具有最大 NumberOfPages 值。此行為不符合標準。
不符合標準的原因
標準要求 HAVING 子句對 GROUP BY 子句定義的行組進行操作。其目的是根據聚合值過濾掉群組。使用不含 GROUP BY 的 HAVING 會允許對任意條件進行過濾,可能會導致意外結果。
有效的標準SQL 查詢
使用不帶GROUP BY 的HAVING 的有效標準SQL 查詢將為:
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
以上是可以在沒有 GROUP BY 子句的 SQL 中使用 HAVING 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!