不使用GROUP BY 的聚合查詢:了解錯誤和解決方案
以前,在舊版的MySQL 上,不使用GROUP BY子句的聚合查詢函數(例如COUNT())通常可以毫無問題地執行。但是,在MySQL 5.7.14 及更高版本中,此類查詢可能會遇到錯誤:
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]
此錯誤源自於MySQL 的預設行為的更改,以與其他RDBMS 系統保持一致,這需要非聚合欄位使用聚合函數時要包含在GROUP BY 子句中的SELECT 子句中。
解決錯誤:
要解決此錯誤,您有兩個選項:
1。調整 MySQL 設定:
您可以透過修改 MySQL 的設定來還原到舊版行為。但是,通常不建議這樣做,因為它會延續非最佳查詢實踐。
2.修正查詢:
首選解決方案是修改查詢以在 GROUP BY 子句中包含非聚合列。例如,上面的查詢可以重寫為:
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1
Exception in 5.7.5 :
在MySQL 5.7.5 版本及更高版本中,它仍然是當非聚合列被限制為單一值時(例如,在WHERE 子句中使用過濾器),允許從GROUP BY子句中排除非聚合列。可以在此處找到此異常的詳細資訊和範例。
以上是為什麼我的沒有 GROUP BY 的聚合查詢會在 MySQL 5.7.14 中導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!