首頁 >資料庫 >mysql教程 >如何解析mySQL' bealts_full_group_by”錯誤?

如何解析mySQL' bealts_full_group_by”錯誤?

Patricia Arquette
Patricia Arquette原創
2025-01-25 03:11:08861瀏覽

How to Resolve the MySQL

MySQL only_full_group_by 錯誤:綜合指南

MySQL 5.7引進了only_full_group_by SQL模式,導致這樣的錯誤出現:

<code>Expression #1 of SELECT list is not in GROUP BY clause and contains non-aggregated column 'support_desk.mod_users_groups.group_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by</code>

出現此錯誤的原因是 only_full_group_by 要求 SELECT 清單中的所有欄位(聚合列除外)也必須出現在 GROUP BY 子句中。 先前的 MySQL 版本沒有強制執行此操作,可能會產生不明確的結果。

解決方案與故障排除

解決此問題的方法如下:

1。將列包含在 GROUP BY 中:

最簡單的修復方法是將有問題的欄位(本例中為 group_id)加入 GROUP BY 子句中:

<code class="language-sql">...
GROUP BY group_name, group_id
...</code>

2。聚合或使用ANY_VALUE():

如果您只需要每個群組中非聚合列的單一值,請使用 COUNT()SUM() 等聚合函數。 或者,ANY_VALUE() 傳回群組中的任意值:

<code class="language-sql">SELECT ANY_VALUE(g.group_id) AS value, g.group_name AS text ...</code>

3。停用only_full_group_by(不建議):

您可以停用此模式,但通常不鼓勵這樣做,因為它掩蓋了潛在有問題的查詢:

<code class="language-sql">SET sql_mode = 'only_full_group_by=OFF';</code>

最佳實務

  • 限定列名稱: 使用多個表時,請務必使用表別名(例如 g.group_id)限定列名稱以避免歧義。 修改後的查詢可能如下圖所示:
<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
...</code>
  • 唯一性: 確保 group_idgroup_name 在各自組中是唯一的,以防止重複值產生意外結果。

透過執行以下步驟,您可以有效解決only_full_group_by違規問題並編寫更強壯且可預測的 MySQL 查詢。

以上是如何解析mySQL' bealts_full_group_by”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn