Abfragen ohne GROUP BY aggregieren: Fehler und Lösungen verstehen
Zuvor wurden in älteren Versionen von MySQL Abfragen ohne eine GROUP BY-Klausel für aggregierte Funktionen (z. B. COUNT()) funktionierten oft ohne Probleme. Bei MySQL 5.7.14 und höher kann bei solchen Abfragen jedoch ein Fehler auftreten:
SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column [...]
Dieser Fehler ist auf eine Änderung des Standardverhaltens von MySQL zur Anpassung an andere RDBMS-Systeme zurückzuführen, die nicht aggregierte Felder erfordern in der SELECT-Klausel, die in die GROUP BY-Klausel aufgenommen werden soll, wenn aggregierte Funktionen verwendet werden.
Behebung des Fehlers:
Um diesen Fehler zu beheben, haben Sie zwei Möglichkeiten:
1. Passen Sie die MySQL-Einstellungen an:
Sie können zum alten Verhalten zurückkehren, indem Sie die MySQL-Einstellungen ändern. Dies wird jedoch im Allgemeinen nicht empfohlen, da dadurch nicht optimale Abfragepraktiken aufrechterhalten werden.
2. Korrigieren Sie die Abfrage:
Die bevorzugte Lösung besteht darin, die Abfrage so zu ändern, dass nicht aggregierte Spalten in die GROUP BY-Klausel einbezogen werden. Die obige Abfrage kann beispielsweise wie folgt umgeschrieben werden:
SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1
Ausnahme in 5.7.5:
In MySQL-Versionen 5.7.5 und höher ist dies immer noch der Fall Es ist zulässig, nicht aggregierte Spalten aus der GROUP BY-Klausel auszuschließen, wenn die nicht aggregierte Spalte auf einen einzelnen Wert beschränkt wurde (z. B. mithilfe eines Filters in der WHERE-Klausel). Einzelheiten und Beispiele zu dieser Ausnahme finden Sie hier.
Das obige ist der detaillierte Inhalt vonWarum verursachen meine aggregierten Abfragen ohne GROUP BY Fehler in MySQL 5.7.14?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!