簡體   English   中英

PostgreSQL,與眾不同,按排序和括號

[英]PostgreSQL, distinct, order by and parentheses

我有以下要求:

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;

而且效果很好。 但是這個:

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

我不明白什么時候必須使用括號,什么時候不用。

Postgres具有元組復合類型的概念。 這些是標量值,它們一起出現-很像許多編程語言中的記錄或結構。

您可以將元組用於表達式,例如:

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

order by表達式order by問題是元組不在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,適用於所有數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM