MySQL 5.7.14 führt eine Änderung ein, die Ihre vorhandenen Abfragen verursachen kann mit dem Fehler „SQLSTATE[42000]: Syntaxfehler oder Zugriffsverletzung: 1140 in aggregierter Abfrage ohne GROUP BY“ fehlschlagen. Dieser Fehler tritt auf, wenn Sie eine Spalte (z. B. COUNT()) in der SELECT-Klausel aggregieren, aber keine nicht aggregierten Spalten in die GROUP BY-Klausel einschließen.
In früheren Versionen von MySQL war das Aggregieren von Spalten ohne Verwendung von GROUP BY zulässig. Um jedoch die Datenintegrität zu gewährleisten, erzwingen MySQL 5.7.5 und spätere Versionen einen SQL-Modus „strict“ oder „only_full_group_by“, der erfordert, dass alle nicht aggregierten Spalten in die GROUP BY-Klausel aufgenommen werden.
< h3>Lösungsoptionen
Sie haben zwei Möglichkeiten, dieses Problem zu beheben:
Sie können die MySQL-Konfiguration so ändern, dass standardmäßig das Legacy-Verhalten verwendet wird, das nicht aggregierte Spalten außerhalb der GROUP BY-Klausel zulässt. Dies wird nicht empfohlen, da es den Best Practices der Branche widerspricht und zu falschen Ergebnissen führen kann.
Ändern Sie Ihre Abfrage so, dass sie die nicht aggregierten Spalten in die GROUP BY-Klausel einbezieht. Zum Beispiel:
<code class="sql">SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1</code>
Beachten Sie, dass der Ausschluss nicht aggregierter Spalten aus der GROUP BY-Klausel in MySQL 5.7.5 weiterhin zulässig ist und spätere Versionen, wenn die nicht aggregierte Spalte auf einen einzelnen Wert beschränkt ist. Beispielsweise würde ein Filter in der WHERE-Klausel die Spalte auf eine einzelne Zeile beschränken, sodass sie sicher aus der GROUP BY-Klausel ausgeschlossen werden kann.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in MySQL 5.7.5 den Fehler „Aggregierte Abfrage ohne GROUP BY'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!