首頁 > 資料庫 > mysql教程 > 如何解決MySQL的「only_full_group_by」錯誤?

如何解決MySQL的「only_full_group_by」錯誤?

DDD
發布: 2025-01-25 03:02:10
原創
360 人瀏覽過

How to Resolve MySQL's

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板