[SQL] PostgreSQL는 WHERE 절에 열 별칭을 허용하지 않습니다
SQLPostgreSQL는 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;
오류가 발생합니다 :
그것은 때문에 평가의 순서 있다는이 대답에서 나에게 분명하다. 그런데 왜 비용을 내림차순으로 순서; 허용?
해결법
-
==============================
1.두 가지 질문 : 1.
두 가지 질문 : 1.
2.
설명서는 여기에 둘 다에 대한 답이 있습니다 :
이것은 SQL 표준에 의해 정의와 이유는 SELECT 쿼리 이벤트의 순서입니다입니다. 절을 적용시에는, 선택리스트에서 출력 컬럼들은 아직 계산되지 않았다. 이 ORDER BY에 올 때, 출력 열이 쉽게 사용할 수 있습니다.
그래서이 여전히 종류의 차종 감각, 처음에는 불편하고 혼란된다.
관련 :
from https://stackoverflow.com/questions/38040631/postgresql-does-not-accept-column-alias-in-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 열 이름에 예약어를 사용하여 (0) | 2020.05.16 |
---|---|
[SQL] ColdFusion에서 - 변수 필드 이름은 데이터베이스 쿼리 결과를 통해 반복 할 때 (0) | 2020.05.16 |
[SQL] INNER는 DB2에 대한 업데이트는 SQL에 가입하세요 (0) | 2020.05.16 |
[SQL] 오라클 11G에서 INSERT SELECT 문 (0) | 2020.05.16 |
[SQL] 어떻게 두 개의 열에서 최대 값을 가진 레코드를 선택하려면? (0) | 2020.05.16 |