Heim >Datenbank >MySQL-Tutorial >Ist die Verwendung von HAVING ohne GROUP BY Standard-SQL?
HAVING Ohne GROUP BY: Standard-SQL-Konformität
Die in der Frage dargestellte Abfragestruktur:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
wird ausgelöst Bedenken hinsichtlich der Gültigkeit gemäß Standard-SQL. Die Abfrage verwendet eine HAVING-Klausel ohne entsprechende GROUP BY-Klausel.
Standard-SQL definiert, dass eine HAVING-Klausel gültig ist, wenn ihre Suchbedingungen bestimmte Kriterien erfüllen. Zu diesen Kriterien gehört, dass sie funktional von den Spalten abhängig sind, auf die in der GROUP BY-Klausel verwiesen wird, oder dass sie äußere Referenzen sind.
In der angegebenen Abfrage gibt es keine GROUP BY-Klausel. Daher erfüllt die Suchbedingung NumberOfPages = MAX(NumberOfPages) nicht die definierten Kriterien, da keine eindeutige funktionale Abhängigkeit von NumberOfPages von einer bestimmten Gruppe besteht.
Um dem Standard zu entsprechen, müsste die Abfrage so sein geändert, um eine GROUP BY-Klausel einzuschließen, wie zum Beispiel:
SELECT * FROM Book GROUP BY BookId HAVING NumberOfPages = MAX(NumberOfPages)
In dieser überarbeiteten Abfrage partitioniert die GROUP BY-Klausel die Daten nach BookId, Erstellen unterschiedlicher Gruppen für jedes Buch. Die HAVING-Klausel wird nun gültig, wenn sie auf diese Gruppen wirkt und prüft, ob eine Gruppe eine Zeile mit der maximalen Anzahl an Seiten enthält.
Es ist wichtig zu beachten, dass einige Datenbanksysteme, wie z. B. MySQL, solche Abfragen möglicherweise ohne zulassen eine GROUP BY-Klausel, aber dieses Verhalten wird als nicht standardmäßige Erweiterung betrachtet.
Das obige ist der detaillierte Inhalt vonIst die Verwendung von HAVING ohne GROUP BY Standard-SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!