Heim >Datenbank >MySQL-Tutorial >Verstößt das nicht standardmäßige GROUP BY-Verhalten von MySQL gegen SQL-Standards?
Einführung
MySQLs Erweiterung für GROUP BY Die Klausel, die die Auswahl von Spalten ermöglicht, die nicht in der Gruppierung enthalten sind, hat Fragen hinsichtlich der Einhaltung von SQL-Standards aufgeworfen. In diesem Artikel werden der historische Kontext und die Auswirkungen dieser Abweichung untersucht.
Der Standard
Vor SQL-2003 war es üblich, die Auswahl nicht aggregierter Daten zu verbieten Spalten, die nicht Teil der GROUP BY-Klausel waren. Diese Einschränkung stellte konsistente Ergebnisse sicher, indem mehrdeutige Gruppierungen beseitigt wurden.
MySQL-Erweiterung
MySQL hat eine Erweiterung eingeführt, die es ermöglicht, nicht aggregierte Spalten auszuwählen, auch wenn sie nicht Teil davon sind die GRUPPE NACH. Laut MySQL-Dokumentation geschieht dies zur Leistungsoptimierung, indem unnötiges Sortieren und Gruppieren vermieden wird. Es gibt jedoch eine Einschränkung: Die nicht aggregierten Werte können unbestimmt sein, was bedeutet, dass der Server einen beliebigen Wert aus jeder Gruppe auswählen kann.
Standard-SQL-Interpretation
Die Der SQL-2003-Standard erlaubt nicht aggregierte Spaltenverweise in der Auswahlliste, wenn sie funktional von den Gruppierungsspalten abhängig sind oder in einem aggregierten Argument enthalten sind. Durch die funktionale Abhängigkeit wird sichergestellt, dass es für jeden Wert der Gruppierungsspalten einen einzelnen eindeutigen Wert für die nicht aggregierten Spalten gibt.
MySQL-Implementierung
Die MySQL-Erweiterung weicht von der ab Standard, indem alle Spalten ausgewählt werden können, auch diejenigen, die funktional nicht von den Gruppierungsspalten abhängig sind. Dies kann zu unerwarteten Ergebnissen führen, wenn die nicht aggregierten Werte innerhalb von Gruppen variieren.
Konsequenzen der MySQL-Erweiterung
Die Implementierung von MySQL hat zwei Hauptauswirkungen:
Behebung der MySQL-Abweichung
MySQL-Benutzer können das nicht standardmäßige Verhalten deaktivieren indem Sie den sql_mode auf ONLY_FULL_GROUP_BY setzen. Darüber hinaus wurden in MySQL 5.7 Verbesserungen eingeführt, um dem Standard besser zu entsprechen. PostgreSQL 9.1 bietet außerdem eine restriktivere Implementierung, die sich eng an die funktionalen Abhängigkeitsanforderungen hält.
Das obige ist der detaillierte Inhalt vonVerstößt das nicht standardmäßige GROUP BY-Verhalten von MySQL gegen SQL-Standards?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!