Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich in MySQL 5.7.5 den Fehler „Aggregierte Abfrage ohne GROUP BY'?

Warum erhalte ich in MySQL 5.7.5 den Fehler „Aggregierte Abfrage ohne GROUP BY'?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 21:37:29756Durchsuche

Why Am I Getting the

SQL-Fehler: „Aggregierte Abfrage ohne GROUP BY“

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.

Warum der Fehler auftritt

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:

1. MySQL-Einstellungen ändern

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.

2. Korrigieren Sie die Abfrage

Ä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>

Ausnahme von der Regel

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn