Warum kann ich keinen Aggregatalias in einer HAVING-Klausel verwenden?
Bedenken Sie die folgende SQL-Anweisung:
select col1,count(col2) as col7 from --some join operation group by col1 having col7 >= 3 -- replace col7 by count(col2) to make the code work
Dieser Code generiert einen Fehler, der darauf hinweist, dass „col7“ ein ungültiger Spaltenname ist. Warum ist das so?
Der Grund liegt in der Ausführungsreihenfolge von SQL-Anweisungen. Die HAVING-Klausel wird vor der SELECT-Klausel ausgewertet. Dies bedeutet, dass bei der Auswertung der HAVING-Klausel der Alias „col7“ für die Aggregatfunktion count(col2) noch nicht definiert ist.
SQL führt Abfragen in der folgenden Reihenfolge aus:
Daher ist im angegebenen Code die HAVING-Klausel versucht, den Alias „col7“ zu verwenden, bevor er in der SELECT-Klausel definiert wird. Um das Problem zu beheben, können Sie „col7“ durch die Aggregatfunktion selbst ersetzen:
select col1,count(col2) from --some join operation group by col1 having count(col2) >= 3
Dadurch kann die HAVING-Klausel die Gesamtanzahl von col2 korrekt auswerten.
Das obige ist der detaillierte Inhalt vonWarum kann ich in einer SQL-HAVING-Klausel keinen Aggregatalias verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!