PostgreSQL不接受WHERE子句中的列别名
在这个关于加入3个不同表的
pgexercises中,答案如下:
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; 为什么我不能在WHERE子句的SELECT列表中引用成本别名? ... where bks.starttime >= '2012-09-14' and bks.starttime < '2012-09-15' and cost > 30 order by cost desc; 发生错误:
从this answer开始,我很清楚,这是因为评估的顺序.但为什么要按成本排序;被允许?
你问两个问题:
1.
2.
manual has an answer for both of them here:
它由SQL标准定义,原因是SELECT查询中的事件序列.在应用WHERE子句时,尚未计算SELECT列表中的输出列.但是当谈到ORDER BY时,输出列很容易获得. 因此,虽然这一开始不方便且令人困惑,但它仍然有意义. 有关: > PostgreSQL Where count condition (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |