HAVING without GROUP BY:標準SQL 一致性
引發問題中呈現的查詢結構:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
引發問題中呈現的查詢結構:
。擔心其根據標準SQL 的有效性。此查詢使用 HAVING 子句,但沒有對應的 GROUP BY 子句。 標準 SQL 定義,如果 HAVING 子句的搜尋條件符合特定條件,則 HAVING 子句有效。這些條件包括在功能上依賴 GROUP BY 子句中引用的欄位或外部參考。 在給定的查詢中,沒有 GROUP BY 子句。因此,搜尋條件 NumberOfPages = MAX(NumberOfPages) 不符合定義的條件,因為 NumberOfPages 對任何特定群組沒有明確的函數依賴性。SELECT * FROM Book GROUP BY BookId HAVING NumberOfPages = MAX(NumberOfPages)
為了符合標準,查詢需要修改為包含GROUP BY 子句,例如:
在此修改後的查詢中,GROUP BY 子句對資料進行分區通過BookId,為每本書建立不同的群組。 HAVING 子句現在變得有效,因為它對這些群組進行操作,檢查是否有任何群組包含具有最大 NumberOfPages 的行。 需要注意的是,某些資料庫系統(例如 MySQL)可能允許此類查詢,而無需GROUP BY 子句,但此行為被視為非標準擴充。以上是使用HAVING而不使用GROUP BY是標準SQL嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!