В этом pgexercises о присоединении 3 различных таблиц, ответ дается следующим образом:PostgreSQL не принимает псевдоним столбца в ИНЕКЕ
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;
Почему я не могу ссылаться на cost
псевдоним в списке SELECT
в статья WHERE
?
Если я запускаю тот же запрос с:
...
where
bks.starttime >= '2012-09-14' and
bks.starttime < '2012-09-15' and
cost > 30
order by cost desc;
возникает ошибка:
ERROR: column "cost" does not exist
Это ясно со мной из this answer, что это из-за порядка оценки. Но почему допустимо order by cost desc;
?
Vide [Концептуальный Порядок оценки в Select Заявление] (http://tinman.cs.gsu.edu/~raj/sql /node22.html). – klin
сначала я неправильно понял ваш вопрос :) теперь я полностью согласен с утверждением выше –
Алиас стоимости не существует до того, как возвращается набор записей, когда применяется оператор where.где, поскольку оператор ORDER BY применяется после создания набора записей, это означает, что тогда используется псевдоним столбца. – Matt