6
在这种pgexercises有关加入3页不同的表,给出的答案是如下列别名:PostgreSQL不支持在WHERE子句
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;
被允许?
韦迪([SELECT语句的评估概念秩序] http://tinman.cs.gsu.edu/~raj/sql /node22.html)。 – klin
起初我误解了你的问题:)现在我完全赞同上面的陈述 –
当where语句被应用时返回记录集之前,成本别名不存在。在创建记录集之后应用ORDER BY语句意味着列别名可用。 – Matt