MySQL 的非標準GROUP BY 擴充功能:允許非群組欄位選擇
標準SQL 語法禁止選擇非聚合欄位選擇
標準SQL 語法禁止選擇非聚合欄位選擇
標準SQL 語法禁止選擇非聚合欄位選擇
標準SQL 語法禁止選擇非聚合欄位選擇標準SQL 語法禁止選擇非聚合欄位選擇 未聚合的查詢GROUP BY 子句中明確分組。然而,MySQL 卻偏離了這個標準,允許這樣的選擇。
標準SQL 與MySQL 的擴充效能改善:避免不必要的列排序和分組可以顯著提高查詢效能。
可維護性:
允許非分組列選擇可以簡化複雜查詢的編寫和維護。不確定結果:
但是,如果非分組列在每個欄位中包含不同的值,則此擴充可能會產生不確定的結果MySQL 擴充的動機
MySQL 實作此擴充功能是為了符合SQL-2003標準,同時也解決了上述的性能和可維護性問題。然而,他們選擇了一種簡化的方法,允許選擇所有列,而不是實現更複雜的機制來識別功能相關的列。
停用擴充功能如果如果需要,使用者可以透過將 sql_mode 設為 ONLY_FULL_GROUP_BY 來停用該擴充功能。這將恢復更嚴格的 SQL-92 行為,確保在聚合查詢中無法選擇非分組列。 最新進展2011 年,PostgreSQL 增加了更多此功能的限制性實現,更接近 SQL 標準。 MySQL 對 GROUP BY 的處理在 5.7 (2015) 版本中得到了進一步改進,納入了識別函數依賴關係的機制,使其與標準更加一致。以上是為什麼 MySQL 允許在 GROUP BY 查詢中使用非分組列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!