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 有元组 或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 并且适用于所有数据库。
我有以下要求:
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 有元组 或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 并且适用于所有数据库。