Heim >Datenbank >MySQL-Tutorial >Können Sie HAVING ohne GROUP BY in SQL verwenden?
Ist es in Standard-SQL möglich, eine HAVING-Klausel ohne eine GROUP BY-Klausel zu verwenden?
Frage 1: Standard-SQL-Konformität
Das bereitgestellte Beispiel query:
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
widerspricht dem SQL-Standard. Gemäß dem Standard müssen alle Spaltenverweise in der HAVING-Klausel auf Spalten verweisen, die funktional von der in der GROUP BY-Klausel angegebenen Spaltenmenge abhängig sind. Der betreffenden Abfrage fehlt jedoch eine GROUP BY-Klausel, sodass sie nicht dem Standard entspricht.
Frage 2: MySQL-Kompatibilität
Die Abfrage funktioniert in MySQL nur unter bestimmten Bedingungen , wobei die erste Zeile des Ergebnisses den Maximalwert für NumberOfPages enthält. Dieses Verhalten ist wahrscheinlich darauf zurückzuführen, dass MySQL HAVING-Klauseln ohne GROUP BY-Klauseln verarbeitet.
Frage 3: Standard-SQL-Begründung
Der Standard verbietet HAVING-Klauseln ohne GROUP BY-Klauseln, da sie zu Mehrdeutigkeiten bei der Angabe führen, welche Zeilen die HAVING-Bedingung erfüllen. Für einen Tabellenausdruck als Ganzes betrachtet gibt es keine logische Grundlage für die Auswahl einer bestimmten Zeile zum Vergleich mit Aggregatfunktionen.
Beispiel einer gültigen Standard-SQL-Abfrage:
Diese Abfrage demonstriert eine gültige Verwendung einer HAVING-Klausel ohne eine GROUP BY-Klausel:
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
Die Abfrage gibt immer entweder eine einzelne Zeile mit dem Wert zurück 'T' (zeigt Bücher mit unterschiedlicher Seitenanzahl an) oder eine leere Menge (keine Zeilen).
Schlussfolgerung:
Während die Beispielabfrage in MySQL funktioniert, ist sie entspricht nicht dem Standard-SQL. Standard-SQL verhindert die Verwendung von HAVING-Klauseln ohne GROUP BY-Klauseln, um Mehrdeutigkeiten zu vermeiden und logische Konsistenz sicherzustellen.
Das obige ist der detaillierte Inhalt vonKönnen Sie HAVING ohne GROUP BY in SQL verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!