Verständnis der Oracle-aliasing - warum ist nicht ein alias nicht erkannt, die in einer Abfrage, es sei denn, eingewickelt in eine zweite Abfrage?

Ich habe eine Abfrage


SELECT COUNT(*) AS "CNT",
       imei
FROM   devices  

führt nur in Ordnung. Ich möchte zu einer weiteren Einschränkung der Abfrage mit einer WHERE-Anweisung. Die (menschlich) logische nächste Schritt ist, um die Abfrage zu verändern nachfolgend:


SELECT COUNT(*) AS "CNT",
       imei
FROM   devices
WHERE  CNT > 1 

Jedoch führt dies zu einer Fehlermeldung ORA-00904: "CNT": Ungültiger Bezeichner. Aus irgendeinem Grund, das einwickeln der Abfrage in einer anderen Abfrage, produziert das gewünschte Ergebnis:


SELECT *
FROM   (SELECT COUNT(*) AS "CNT",
               imei
        FROM   devices
        GROUP  BY imei)
WHERE  CNT > 1  

Warum Oracle nicht erkennen, die der alias "CNT" in der zweiten Abfrage?

Nebenbei: diese Abfrage (mit Aggregaten) ist besser geschrieben, mit der HAVING-Klausel: "select count(*) cnt, die imei von Endgeräten Gruppe von imei having count(*) > 1"

InformationsquelleAutor simon | 2011-05-27

Schreibe einen Kommentar