So beheben Sie den MySQL-Fehlercode 1055

Veröffentlicht: 2024-03-28

Beim MySQL-Fehlercode 1055 geht es um die Aktivierung des SQL-Modus „ONLY_FULL_GROUP_BY“, der sich darauf auswirkt, wie GROUP BY-Klauseln interpretiert und ausgeführt werden. Lassen Sie uns gemeinsam diesen Fehler aufdecken, seine Variationen, die zugrunde liegenden Ursachen und vor allem die Lösung untersuchen.

Den Fehler verstehen

Der MySQL-Fehlercode 1055 wird unter bestimmten Umständen ausgelöst, die die SELECT-Anweisung und die GROUP BY-Klausel betreffen. Ziel dieser Anforderung ist es, mehrdeutige Ergebnisse aus Abfragen zu verhindern, bei denen Daten gruppiert werden.

Praktisch ausgedrückt: Wenn Sie Daten in einer Abfrage gruppieren, muss MySQL wissen, wie mit mehreren Zeilen umgegangen wird, die in dieselbe Gruppe fallen, und zwar für Spalten, die nicht in der GROUP BY-Klausel enthalten sind. Mit dem Modus „ONLY_FULL_GROUP_BY“ stellt MySQL durch die Durchsetzung dieser Regeln sicher, dass jede gruppierte Abfrage klar und eindeutig ist.

Wenn Sie also auf Fehler 1055 stoßen, bittet MySQL im Wesentlichen um Klarstellung: „Sagen Sie mir für die Spalten, die Sie auswählen, entweder genau, wie ich sie gruppieren soll (indem Sie sie in die GROUP BY-Klausel aufnehmen), oder sagen Sie mir, wie die Daten aggregiert werden sollen.“ (durch die Verwendung von Funktionen wie COUNT(), SUM() usw.).“

Die Rolle von ONLY_FULL_GROUP_BY verstehen

Dieser Modus spielt eine entscheidende Rolle bei der Gewährleistung der Genauigkeit und Zuverlässigkeit von Datenabrufvorgängen, insbesondere in komplexen Datenbankumgebungen.

Wenn „ONLY_FULL_GROUP_BY“ aktiviert ist, erzwingt MySQL eine klare Regel: Wenn eine Spalte in der SELECT-Liste einer Abfrage erscheint, die eine GROUP BY-Klausel enthält, muss diese Spalte eines der folgenden Kriterien erfüllen:

Seien Sie eine Aggregatfunktion : Die Spalte wird innerhalb einer Aggregatfunktion wie COUNT(), SUM(), MAX() usw. verwendet. Diese Funktionen fassen Daten aus mehreren Zeilen zusammen und erzeugen ein einzelnes Ergebnis pro Gruppe.

Funktional abhängig von GROUP BY-Spalten sein : Die Spalte ist funktional abhängig von den in der GROUP BY-Klausel aufgeführten Spalten.Funktionale Abhängigkeit bedeutet, dass der Wert einer Spalte (der funktional abhängigen Spalte) eindeutig durch die andere Spalte oder Spalten (die Spalten in der GROUP BY-Klausel) bestimmt wird. Einfacher ausgedrückt gibt es für jeden gegebenen Wert der GROUP BY-Spalte genau einen möglichen Wert der funktional abhängigen Spalte.

Variationen des Fehlers

Hier sind einige Möglichkeiten, wie dieser Fehler auftreten kann:

  • MySQL-Fehlercode 1055: Ausdruck Nr. 1 der SELECT-Liste ist nicht in der GROUP BY-Klausel und enthält die nicht aggregierte Spalte „database.table.column“, die funktional nicht von den Spalten in der GROUP BY-Klausel abhängig ist; Dies ist nicht kompatibel mit sql_mode=only_full_group_by
  • Fehler 1055: ONLY_FULL_GROUP_BY: Etwas ist nicht in der GROUP BY-Klausel enthalten
  • SQL-Fehler (1055): Ausdruck der SELECT-Liste ist nicht in der GROUP BY-Klausel
  • SQLSTATE[42000]: Syntaxfehler oder Zugriffsverletzung: 1055

Gründe, warum dieser Fehler auftritt

Der MySQL-Fehlercode 1055 tritt hauptsächlich auf, weil der SQL-Modus „ONLY_FULL_GROUP_BY“ aktiviert ist, der strengere Regeln für Abfragen mit der GROUP BY-Klausel erfordert. Hier sind die Hauptgründe:

SQL-Modus „ONLY_FULL_GROUP_BY“ aktiviert : Dieser Modus erfordert, dass alle SELECT-Listenausdrücke in der GROUP BY-Klausel erscheinen, sofern sie nicht aggregiert sind.Es soll mehrdeutige Abfrageergebnisse verhindern.

Nicht aggregierte Spalten in der SELECT-Liste : Wenn Ihre SELECT-Liste Spalten enthält, die nicht in Aggregatfunktionen eingeschlossen sind (wie SUM, AVG, MIN, MAX, COUNT) und diese Spalten nicht Teil der GROUP BY-Klausel sind, markiert MySQL dies als Fehler unter „ONLY_FULL_GROUP_BY“.

Funktionale Abhängigkeit : MySQL erwartet, dass Spalten in der SELECT-Liste, die nicht aggregiert sind, funktional von der GROUP BY-Klausel abhängig sind.Funktionale Abhängigkeit bedeutet, dass eine Spalte eine andere Spalte eindeutig bestimmt. Wenn diese Beziehung nicht erfüllt ist, gibt MySQL den Fehler 1055 aus.

Behebung des MySQL-Fehlercodes 1055

Nachdem wir uns nun angesehen haben, was der Fehlercode 1055 bedeutet und was den Fehler verursacht, werfen wir einen Blick auf einige Möglichkeiten, diesen Fehler zu beheben.

Analysieren Sie die Abfrage

Der erste Schritt zur Behebung des MySQL-Fehlercodes 1055 besteht darin, die Abfrage zu analysieren, die diesen Fehler auslöst. Ziel dieser Untersuchung ist es, die in der SELECT-Klausel aufgeführten Spalten zu ermitteln, die weder in der GROUP BY-Klausel enthalten noch aggregiert sind. Diese Diskrepanz ist der Kern des Problems, da MySQL im SQL-Modus ONLY_FULL_GROUP_BY vorschreibt, dass jede in der SELECT-Liste referenzierte Spalte und keine Aggregatfunktion in der GROUP BY-Klausel deklariert werden muss, um eindeutige Ergebnisse zu gewährleisten.

Passen Sie Ihre Abfrage an

Um diesen Fehler zu beheben, sind Anpassungen der Abfrage erforderlich. Die Änderungen konzentrieren sich auf die Anpassung an die ONLY_FULL_GROUP_BY-Bestimmungen. Im Folgenden sind zwei Hauptstrategien zur Erreichung der Compliance aufgeführt:

Schließen Sie alle nicht aggregierten Spalten in GROUP BY ein

Umfassende Einbeziehung : Die einfachste Methode besteht darin, sicherzustellen, dass jede in der SELECT-Liste angezeigte Spalte, die nicht Teil einer Aggregatfunktion (wie COUNT, AVG, SUM usw.) ist, in die GROUP BY-Klausel einbezogen wird.Dieser Ansatz entspricht dem SQL-Standard für GROUP BY-Operationen und gewährleistet, dass jede Zeile im Ergebnissatz durch die in der GROUP BY-Klausel angegebenen Spalten eindeutig identifiziert wird.

Beispiel

Stellen Sie sich vor, Sie haben eine Datenbanktabelle mit dem Namen „Sales“ mit den Spalten „Datum“, „Region“ und „Betrag“. Sie möchten den Gesamtumsatz pro Region ermitteln, aber Ihre erste Abfrage löst den Fehler 1055 aus.

Erste Abfrage (verursacht Fehler 1055)

 Datum, Region, Summe (Betrag) auswählen

AUS dem Verkauf

GRUPPE NACH Region;

Diese Abfrage verursacht einen Fehler, da „Datum“ nicht in der GROUP BY-Klausel enthalten ist und nicht in einer Aggregatfunktion verwendet wird.

Geänderte Abfrage (Fehler 1055 wird behoben)

 Datum, Region, Summe (Betrag) auswählen

AUS dem Verkauf

GRUPPE NACH Datum, Region;

Durch die Aufnahme von „Datum“ und „Region“ in die GROUP BY-Klausel entspricht die Abfrage dem SQL-Modus „ONLY_FULL_GROUP_BY“, wodurch der Fehler behoben wird.

Verwenden Sie Aggregatfunktionen für nicht gruppierte Spalten

Strategische Aggregation : In Szenarien, in denen die Einbeziehung aller nicht aggregierten Spalten in die GROUP BY-Klausel unpraktisch ist oder von der Absicht der Abfrage abweicht, ist die Verwendung von Aggregatfunktionen für die nicht gruppierten Spalten eine effektive Alternative.Diese Methode konsolidiert nicht eindeutige Daten in aussagekräftige aggregierte Ergebnisse und umgeht dabei die Einschränkungen von ONLY_FULL_GROUP_BY.

Beispiel

Lassen Sie uns dieselbe „Verkaufs“-Tabelle verwenden. Angenommen, Sie möchten die Region und das letzte Verkaufsdatum auswählen, aber nur nach „Region“ gruppieren. Durch Anwenden einer Aggregatfunktion auf die Spalte „Datum“ kann dies erreicht werden, ohne sie in die GROUP BY-Klausel aufzunehmen.

Erste Abfrage (verursacht Fehler 1055)

 Region, Datum auswählen

AUS dem Verkauf

GRUPPE NACH Region;

Diese Abfrage schlägt fehl, da „Datum“ weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

Geänderte Abfrage (Fehler 1055 wird behoben)

 SELECT-Region, MAX(date) AS Latest_sale_date

AUS dem Verkauf

GRUPPE NACH Region;

In dieser modifizierten Abfrage wird die Funktion „MAX()“ verwendet, um die Spalte „Datum“ zu aggregieren und so das späteste Verkaufsdatum für jede Region auszuwählen. Dadurch wird der Fehler durch Einhaltung der „ONLY_FULL_GROUP_BY“-Anforderungen behoben, da „region“ die einzige Spalte in der GROUP BY-Klausel ist und „date“ innerhalb einer Aggregatfunktion verwendet wird.

Deaktivieren Sie den SQL-Modus „ONLY_FULL_GROUP_BY“.

Das Deaktivieren des Modus „ONLY_FULL_GROUP_BY“ in MySQL kann als letzter Ausweg angesehen werden, wenn die Abfragelogik die Einbeziehung von Spalten erfordert, die nicht sinnvoll zur GROUP BY-Klausel hinzugefügt oder aggregiert werden können.

Durch das Deaktivieren dieses Modus werden möglicherweise unmittelbare Probleme wie der MySQL-Fehlercode 1055 behoben, es besteht jedoch das Risiko, dass nicht deterministische Abfrageergebnisse generiert werden. Dieser Nichtdeterminismus kann dazu führen, dass Abfragen unter unterschiedlichen Bedingungen unterschiedliche Ergebnisse zurückgeben, was möglicherweise zu Dateninkonsistenzen und schwer zu debuggenden Problemen in Produktionsumgebungen führt.

So deaktivieren Sie „ONLY_FULL_GROUP_BY“.

Um „ONLY_FULL_GROUP_BY“ für die aktuelle Datenbanksitzung vorübergehend zu deaktivieren, was bedeutet, dass die Änderung nur für die Dauer der Verbindung gültig ist, verwenden Sie den folgenden SQL-Befehl:

 SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

Dieser Befehl entfernt selektiv „ONLY_FULL_GROUP_BY“ aus den SQL-Modi der Sitzung, ohne die globale SQL-Moduskonfiguration oder andere Datenbanksitzungen zu beeinträchtigen.

Global

Für eine dauerhaftere Lösung, die sich auf alle neuen Verbindungen zum MySQL-Server auswirkt, können Sie die globale SQL-Moduseinstellung wie folgt ändern:

 SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Durch die Ausführung dieses Befehls wird die serverweite SQL-Moduseinstellung geändert, indem „ONLY_FULL_GROUP_BY“ entfernt wird, wodurch die Änderung nach der Ausführung auf alle neuen Verbindungen angewendet wird. Es ist wichtig zu beachten, dass dies keine Auswirkungen auf bestehende Verbindungen hat und ein Serverneustart oder neue Verbindungen erforderlich sind, um die Änderungen global anzuwenden.

Best Practices für die Verwaltung von MySQL-Abfragen

Beim Umgang mit MySQL-Abfragen, insbesondere in Kontexten mit komplexen Gruppierungs- und Aggregatfunktionen, ist es wichtig, eine Reihe von Best Practices zu übernehmen. Diese Vorgehensweisen stellen nicht nur die Effizienz und Korrektheit Ihrer Abfragen sicher, sondern tragen auch dazu bei, die Integrität und Zuverlässigkeit Ihrer Daten aufrechtzuerhalten, insbesondere wenn Sie Einschränkungen wie den SQL-Modus „ONLY_FULL_GROUP_BY“ umgehen.

Datenbeziehungen verstehen : Verschaffen Sie sich ein tiefes Verständnis der Beziehungen und Abhängigkeiten zwischen den Spalten in Ihrer Datenbank.Wenn Sie wissen, wie Daten miteinander verknüpft sind, können Sie effektivere Abfragen erstellen und Fehler oder unerwartete Ergebnisse vermeiden.

Schema-Vertrautheit : Machen Sie sich regelmäßig mit dem Datenbankschema vertraut.Diese Vertrautheit hilft beim Erkennen, nach welchen Spalten gruppiert werden muss und welche effektiv in Aggregatfunktionen verwendet werden können.

Strategische Anwendung : Wenden Sie Aggregatfunktionen (wie „SUM()“, „AVG()“, „COUNT()“ usw.) sorgfältig an, um bestimmte Analyseziele zu erreichen.Diese Funktionen sind leistungsstarke Werkzeuge zum Zusammenfassen und Analysieren von Daten, können jedoch bei unsachgemäßer Verwendung zu irreführenden Ergebnissen führen.

Übermäßige Aggregation vermeiden : Seien Sie vorsichtig bei der übermäßigen Verwendung von Aggregatfunktionen bei großen Datensätzen ohne ordnungsgemäße Gruppierung, da dies zu Leistungsproblemen führen und möglicherweise die Erkenntnisse, die Sie aus den Daten gewinnen möchten, verschleiern kann.

Erwartete Ergebnisse sicherstellen : Nachdem Sie Anpassungen an Ihren Abfragen vorgenommen haben – z. B. die Deaktivierung von „ONLY_FULL_GROUP_BY“ oder die Änderung der Struktur Ihrer Abfragen – müssen Sie diese Änderungen unbedingt ausgiebig testen.Durch diese Tests wird sichergestellt, dass die Abfragen die erwarteten Ergebnisse liefern und die Datenintegrität gewahrt bleibt.

Leistungsbewertung : Beim Testen geht es nicht nur um Korrektheit;es geht auch um Leistung. Bewerten Sie die Auswirkungen Ihrer Abfragen auf die Datenbankleistung, insbesondere bei der Arbeit mit großen Datensätzen oder komplexen Aggregationen.

Abschließende Gedanken

Wir haben uns mit der Behebung des MySQL-Fehlercodes 1055 befasst und uns dabei darauf konzentriert, Abfragen so anzupassen, dass sie „ONLY_FULL_GROUP_BY“ entsprechen, oder als letzten Ausweg diesen Modus zu deaktivieren. Wir haben Best Practices zur Gewährleistung der Datenintegrität und Abfragegenauigkeit hervorgehoben und betont, wie wichtig es ist, SQL-Standards zu verstehen und innerhalb dieser zu arbeiten, um Probleme zu vermeiden und einen zuverlässigen Datenbankbetrieb sicherzustellen.

Beschleunigen Sie die Erstellung Ihrer WordPress-Website mit KI.

Erstellen Sie mit dem 10Web AI Website Builder zehnmal schneller eine benutzerdefinierte WordPress-Website, die auf Ihre Geschäftsanforderungen zugeschnitten ist.

Generieren Sie Ihre Website
Keine Kreditkarte benötigt