복붙노트

[SQL] PostgreSQL는 WHERE 절에 열 별칭을 허용하지 않습니다

SQL

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;

오류가 발생합니다 :

그것은 때문에 평가의 순서 있다는이 대답에서 나에게 분명하다. 그런데 왜 비용을 내림차순으로 순서; 허용?

해결법

  1. ==============================

    1.두 가지 질문 : 1.

    두 가지 질문 : 1.

    2.

    설명서는 여기에 둘 다에 대한 답이 있습니다 :

    이것은 SQL 표준에 의해 정의와 이유는 SELECT 쿼리 이벤트의 순서입니다입니다. 절을 적용시에는, 선택리스트에서 출력 컬럼들은 아직 계산되지 않았다. 이 ORDER BY에 올 때, 출력 열이 쉽게 사용할 수 있습니다.

    그래서이 여전히 종류의 차종 감각, 처음에는 불편하고 혼란된다.

    관련 :

  2. from https://stackoverflow.com/questions/38040631/postgresql-does-not-accept-column-alias-in-where-clause by cc-by-sa and MIT license