MySQL only_full_group_by
Fehler: Ein umfassender Leitfaden
MySQL 5.7 führte den only_full_group_by
SQL-Modus ein, der zu Fehlern wie diesen führte:
<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>
Dieser Fehler tritt auf, weil only_full_group_by
vorschreibt, dass alle Spalten in der SELECT
-Liste, mit Ausnahme aggregierter Spalten, auch in der GROUP BY
-Klausel erscheinen müssen. Frühere MySQL-Versionen haben dies nicht erzwungen, was möglicherweise zu mehrdeutigen Ergebnissen führte.
Lösungen und Fehlerbehebung
So beheben Sie dieses Problem:
1. Fügen Sie die Spalte in GROUP BY
:
Die einfachste Lösung besteht darin, die fehlerhafte Spalte (group_id
in diesem Beispiel) zu Ihrer GROUP BY
-Klausel hinzuzufügen:
<code class="language-sql">... GROUP BY group_name, group_id ...</code>
2. Aggregieren oder verwenden ANY_VALUE()
:
Wenn Sie nur einen einzelnen Wert aus nicht aggregierten Spalten innerhalb jeder Gruppe benötigen, verwenden Sie Aggregatfunktionen wie COUNT()
oder SUM()
. Alternativ gibt ANY_VALUE()
einen beliebigen Wert aus der Gruppe:
<code class="language-sql">SELECT ANY_VALUE(g.group_id) AS value, g.group_name AS text ...</code>
3. Deaktivieren Sie only_full_group_by
(nicht empfohlen):
Sie können diesen Modus deaktivieren, es wird jedoch generell davon abgeraten, da er potenziell problematische Abfragen maskiert:
<code class="language-sql">SET sql_mode = 'only_full_group_by=OFF';</code>
Best Practices
g.group_id
), wenn Sie mehrere Tabellen verwenden, um Mehrdeutigkeiten zu vermeiden. Eine überarbeitete Abfrage könnte so aussehen:<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
und group_name
innerhalb ihrer jeweiligen Gruppen eindeutig sind, um unerwartete Ergebnisse durch doppelte Werte zu verhindern.Indem Sie diese Schritte befolgen, können Sie only_full_group_by
Verstöße effektiv beheben und robustere und vorhersehbarere MySQL-Abfragen schreiben.
Das obige ist der detaillierte Inhalt vonWie beheben Sie den Fehler 'mySQL' 'Only_full_Group_By'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!