2017-12-06 13 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; 

をし、それが正常に動作します。しかし、この1:私がいないときは、括弧とを使用しなければならないとき、私は理解できない

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

Postgresは、タプルまたはcomposite typesという概念を持っています。これらは一緒に現れるスカラ値です。多くのプログラミング言語でレコードや構造体とよく似ています。

次のような、表現のためのタプルを使用することができます。あなたのorder by表現に問題がタプルがselectではないということです

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

。あなたはあまりにもそこに括弧を使用してこれを解決することができます:

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