In diesem pgexercises über den Beitritt zu 3 verschiedene Tabellen akzeptieren, ist die Antwort wie folgt festgelegt:PostgreSQL nicht Spalte alias in WHERE-Klausel
select mems.firstname || ' ' || mems.surname as member,
facs.name as facility,
case
when mems.memid = 0 then
bks.slots*facs.guestcost
else
bks.slots*facs.membercost
end as cost
from
cd.members mems
inner join cd.bookings bks
on mems.memid = bks.memid
inner join cd.facilities facs
on bks.facid = facs.facid
where
bks.starttime >= '2012-09-14' and
bks.starttime < '2012-09-15' and (
(mems.memid = 0 and bks.slots*facs.guestcost > 30) or
(mems.memid != 0 and bks.slots*facs.membercost > 30)
)
order by cost desc;
Warum kann ich nicht beziehen sich auf die cost
Alias in der SELECT
Liste in die WHERE
Klausel?
Wenn ich die gleiche Abfrage mit laufen:
...
where
bks.starttime >= '2012-09-14' and
bks.starttime < '2012-09-15' and
cost > 30
order by cost desc;
ein Fehler auftritt:
ERROR: column "cost" does not exist
es mit mir aus this answer klar ist, dass es wegen der Reihenfolge der Auswertung ist. Aber warum ist order by cost desc;
erlaubt?
Vide [Konzeptuell Reihenfolge der Auswertung eines Select-Anweisung] (http://tinman.cs.gsu.edu/~raj/sql /node22.html). – klin
zuerst habe ich Ihre Frage missverstanden :) jetzt aggre ich vollständig mit Aussage über –
Der Kosten-Alias existiert nicht, bevor das Recordset zurückgegeben wird, wenn die Where-Anweisung angewendet wird.wo die ORDER BY-Anweisung angewendet wird, nachdem das Recordset erstellt wurde, was bedeutet, dass der Spaltenalias dann verfügbar ist. – Matt