Heim >Datenbank >MySQL-Tutorial >Wie geht MySQL mit nicht aggregierten Spalten in GROUP BY-Klauseln um?
Nicht aggregierte Spalten in MySQL GROUP BY: Eine Abweichung vom Standard
MySQLs Implementierung von GROUP BY ermöglicht die Einbeziehung nicht aggregierter Spalten in der SELECT-Liste, auch wenn sie nicht in den Gruppierungskriterien enthalten sind. Dieses Verhalten unterscheidet sich vom ANSI-SQL-Standard, der die Auswahl nicht gruppierter Spalten in solchen Abfragen verbietet.
Diese Diskrepanz ergibt sich aus dem Konzept der funktionalen Abhängigkeit. Wenn in MySQL eine nicht gruppierte Spalte funktional von der Gruppierungsspalte abhängig ist, wählt MySQL stillschweigend einen einzelnen Wert für diese Spalte aus und gibt ihn zurück. Es ist jedoch wichtig zu beachten, dass solche Abfragen zu mehrdeutigen Ergebnissen führen können, wenn die funktionale Abhängigkeit nicht erzwungen wird.
Zum Beispiel wäre die folgende Abfrage in ANSI SQL ungültig:
SELECT AVG(table1.col1), table1.personID, persons.col4 FROM table1 JOIN persons ON (table1.personID = persons.id) GROUP BY table1.personID;
In MySQL ist diese Abfrage erlaubt, da personen.col4 über den Join funktional von table1.personID abhängig ist. Wenn jedoch mehrere Personen dieselbe Personen-ID haben, könnte das Ergebnis für personen.col4 willkürlich sein.
Um solche Mehrdeutigkeiten zu verhindern, stellt MySQL den SQL-Modus ONLY_FULL_GROUP_BY zur Verfügung, der strengere Gruppierungsregeln gemäß dem ANSI-Standard erzwingt. Standardmäßig ist dieser Modus nicht aktiviert, er kann jedoch aktiviert werden, um sicherzustellen, dass Abfragen dem Standardverhalten entsprechen.
Beachten Sie, dass SQLite auch nicht aggregierte Spalten in GROUP BY-Abfragen zulässt, aber den letzten Wert auswählt in der Gruppe statt einer beliebigen. Auf dieses Verhalten sollte man sich nicht verlassen, da es sich in zukünftigen Versionen ändern kann. Um Mehrdeutigkeiten zu vermeiden, wird empfohlen, Abfragen so umzuschreiben, dass sie eindeutig und deterministisch sind.
Das obige ist der detaillierte Inhalt vonWie geht MySQL mit nicht aggregierten Spalten in GROUP BY-Klauseln um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!