我有以下要求:
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
我无法理解何时必须使用括号,何时不使用括号。
答案 0 :(得分:2)
Postgres具有元组或composite types的概念。这些是一起出现的标量值 - 非常类似于许多编程语言中的记录或结构。
您可以将元组用于表达式,例如:
where (m1.surname, m1.firstname) in ( ('a', 'b'), ('x', 'y') )
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,可以在所有数据库中使用。