MySQL 5.7 的 only_full_group_by
錯誤:詳解及解決方案
在 MySQL 5.7 中遇到 "Expression #1 of SELECT list is not in GROUP BY clause" 以及 "only_full_group_by" 錯誤可能會讓人困惑。本文旨在闡明此問題並提供解決方案。
問題分析
5.7 之前的 MySQL 版本允許 SELECT 列表中包含未出現在 GROUP BY 子句中的列,即使這些列的值在分組內可能不同。然而,在 5.7 版本中,默認行為已更改,僅當這些列被聚合時才允許這樣做。這是由 "only_full_group_by" 模式強制執行的。
問題解決
該錯誤表明查詢的 SELECT 列表中包含一個未聚合的列,該列與 GROUP BY 子句中的列之間不存在函數依賴關係。要解決此問題,可以刪除未聚合的列,或將其添加到 GROUP BY 子句中。
推薦解決方案
對於此特定查詢,建議將 "group_id" 列添加到 GROUP BY 子句中,確保所有未聚合的列都與 GROUP BY 子句中的列存在函數依賴關係:
<code class="language-sql">SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE g.active = 1 AND g.department_id = 1 AND g.manage_work_orders = 1 AND g.group_name != 'root' AND g.group_name != 'superuser' GROUP BY g.group_id, g.group_name HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
其他注意事項
在多表查詢中,最好使用表名或別名限定列名,如推薦解決方案所示。
不建議關閉 "only_full_group_by",因為它允許任意選擇未聚合的列,這可能導致結果不一致且不可預測。
以上是如何解決MySQL的「only_full_group_by」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!