Heim > Datenbank > MySQL-Tutorial > Warum erlaubt MySQL die Auswahl von Spalten, die nicht in der GROUP BY-Klausel enthalten sind?

Warum erlaubt MySQL die Auswahl von Spalten, die nicht in der GROUP BY-Klausel enthalten sind?

Susan Sarandon
Freigeben: 2024-12-23 08:40:17
Original
376 Leute haben es durchsucht

Why Does MySQL Allow Selecting Columns Not in the GROUP BY Clause?

Auswählen von Spalten, die nicht in der GROUP BY-Klausel enthalten sind: Das mehrdeutige Verhalten von MySQL

In MySQL ist es möglich, eine Spalte auszuwählen, die nicht in einer Aggregatfunktion oder der GROUP BY enthalten ist Klausel, die für Programmierer, die mit anderen SQL-Datenbanken arbeiten, verwirrend sein kann. Dieses Verhalten weicht vom ANSI-SQL-Standard ab, der erfordert, dass alle ausgewählten Spalten Teil der Gruppierung sind oder in einer Aggregatfunktion erscheinen.

Mehrdeutige Abfragen und willkürliche Werteauswahl

Wenn MySQL auf eine solche Abfrage stößt, gibt es stillschweigend einen beliebigen Wert aus der Spalte für jede Gruppe zurück, normalerweise den Wert aus der ersten oder letzten Zeile in der Gruppe. Dieses Verhalten kann zu mehrdeutigen Ergebnissen führen, insbesondere wenn die Werte in der nicht gruppierten Spalte nicht innerhalb jeder Gruppe konsistent sind.

Beispielabfrage

Betrachten Sie die folgende MySQL-Abfrage :

SELECT
     AVG(table_name.col1),
     AVG(table_name.col2),
     AVG(table_name.col3),
     table_name.personID,
     table_name.col4
FROM table_name
GROUP BY table_name.personID;
Nach dem Login kopieren

In dieser Abfrage ist Spalte4 nicht Teil der GROUP BY-Klausel oder einer Aggregatfunktion. MySQL wählt für jede Gruppe willkürlich einen Wert für col4 aus. Dies kann problematisch sein, wenn verschiedene Zeilen innerhalb einer Gruppe unterschiedliche Werte für Spalte4 haben.

Funktionale Abhängigkeit und deterministische Ergebnisse

MySQL ermöglicht die Auswahl nicht gruppierter Spalten, wenn diese funktional sind abhängig von der/den Spalte(n) in der GROUP BY-Klausel. Das bedeutet, dass es für jeden Wert der Gruppierungsspalte(n) nur einen möglichen Wert für die nicht gruppierte Spalte gibt. In solchen Fällen liefert die Abfrage ein deterministisches Ergebnis.

Es ist jedoch wichtig zu beachten, dass sich das Verhalten von MySQL bei mehrdeutigen Abfragen in zukünftigen Versionen ändern kann. Daher wird empfohlen, die Verwendung nicht gruppierter Spalten in SELECT-Klauseln zu vermeiden, es sei denn, sie sind explizit in der GROUP BY-Klausel oder einer Aggregatfunktion enthalten.

SQL-Modus „ONLY_FULL_GROUP_BY“

MySQL 5.7 führte den SQL-Modus „ONLY_FULL_GROUP_BY“ ein, der den ANSI-SQL-Standard für GROUP BY-Abfragen erzwingt. Wenn dieser Modus aktiviert ist, führt die Auswahl nicht gruppierter Spalten ohne Aggregatfunktion zu einem Fehler.

Das obige ist der detaillierte Inhalt vonWarum erlaubt MySQL die Auswahl von Spalten, die nicht in der GROUP BY-Klausel enthalten sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage