2017-12-06 5 views
1

나는 다음과 같은 요청이 있습니다PostgreSQL을, 구별하여 순서 괄호

select distinct m1.firstname, m1.surname 
    from cd.members as m1 
    join cd.members as m2 on m2.recommendedby = m1.memid 
    order by m1.surname, m1.firstname; 

을하고 잘 작동합니다. 하지만이 하나 : 나는하지 않을 경우 괄호를 사용해야 할 때 이해할 수없는

ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list 

:

select distinct m1.firstname, m1.surname 
    from cd.members as m1 
    join cd.members as m2 on m2.recommendedby = m1.memid 
    order by (m1.surname, m1.firstname); 

나에게 오류를 제공합니다.

답변

2

포스트그레스는 튜플 또는 composite types의 개념을 가지고 있습니다. 이들은 많은 프로그래밍 언어에서 레코드 또는 구조체와 같이 함께 나타나는 스칼라 값입니다. 당신의 order by 표현과

where (m1.surname, m1.firstname) in (('a', 'b'), ('x', 'y')) 

문제는 튜플이 select하지 않을 것입니다 :

당신은 다음과 같은 표현에 대한 튜플을 사용할 수 있습니다. 당신은 너무 거기에 괄호를 사용하여이 문제를 해결할 수 :

select distinct (m1.firstname, m1.surname) 
from cd.members m1 join 
    cd.members m2 
    on m2.recommendedby = m1.memid 
order by (m1.surname, m1.firstname); 

하지만 표준 SQL과 모든 데이터베이스에서 작동 괄호가없는 버전을 고수한다.

+0

알겠습니다. 답변 해 주셔서 감사합니다. – user3309314