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_id
和 group_name
在各自組中是唯一的,以防止重複值產生意外結果。 透過執行以下步驟,您可以有效解決only_full_group_by
違規問題並編寫更強壯且可預測的 MySQL 查詢。
以上是如何解析mySQL' bealts_full_group_by”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!