Heim >Datenbank >MySQL-Tutorial >Ist die Verwendung von HAVING ohne GROUP BY Standard-SQL?

Ist die Verwendung von HAVING ohne GROUP BY Standard-SQL?

DDD
DDDOriginal
2024-12-31 00:12:26191Durchsuche

Is Using HAVING Without 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!

Stellungnahme:
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