Heim >Datenbank >MySQL-Tutorial >Warum ist das GROUP BY-Verhalten von MySQL ohne Aggregatfunktionen unvorhersehbar?
Nichtdeterministisches Verhalten der MySQL-GROUP BY
-Klausel ohne Aggregatfunktion
Wenn Sie die GROUP BY
-Klausel in einer MySQL-Abfrage ohne eine Aggregatfunktion in der SELECT
-Klausel verwenden, ist ihr Verhalten möglicherweise nicht deterministisch. Dies liegt daran, dass MySQL aus Leistungsgründen das Weglassen von Spalten aus der GROUP BY
-Klausel zulässt.
Diese Auslassung funktioniert jedoch nur, wenn die ausgelassene Spalte in allen Zeilen innerhalb jeder Gruppierung den gleichen Wert hat. Ist dies nicht der Fall, wie im Beispiel gezeigt, steht es dem Server frei, einen beliebigen Wert in der Gruppe zu wählen. Daher ist der Rückgabewert undefiniert.
Um vorhersehbare Ergebnisse zu gewährleisten, wird empfohlen, alle Spalten, die nicht aggregiert sind, in die GROUP BY
-Klausel aufzunehmen. Darüber hinaus wird im Allgemeinen nicht empfohlen, das Platzhalterzeichen *
zur Auswahl aller Spalten in einer Tabelle zu verwenden, da dies in ähnlichen Situationen zu unvorhersehbarem Verhalten führen kann.
In der MySQL-Dokumentation heißt es eindeutig: „Bei Verwendung dieser Funktion sollten alle Zeilen in jeder Gruppe denselben Wert für die im Abschnitt GROUP BY
weggelassenen Spalten haben. Wenn diese Bedingung nicht erfüllt ist, sind die Abfrageergebnisse undefiniert.“ .
Überlegen Sie daher sorgfältig, welche Spalten in der GROUP BY
-Klausel enthalten sind, und vermeiden Sie es, Spalten wegzulassen, die unterschiedliche Werte innerhalb der Gruppierung enthalten.
Das obige ist der detaillierte Inhalt vonWarum ist das GROUP BY-Verhalten von MySQL ohne Aggregatfunktionen unvorhersehbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!