首页 > 解决方案 > postgresql - 具有多个表的列的分页/排序

问题描述

按 2 个表中的列进行分页和排序。

  1. 客户(ID,名字,姓氏)
  2. 客户电子邮件(客户 ID,类型,电子邮件)。

一位客户可能有多封电子邮件。

要求:获得 10 个客户并按姓氏、电子邮件排序。

--Sort by customer.last_name, customer_email.email

select c.*, ce.email
from customer c
inner join (select   distinct c.id, c.last_name
            from     customer c, customer_email ce 
            where    c.id = ce.customer_id 
            order by c.last_name, ce.email offset 0 limit 10
           ) AS paged_c on paged_c.id = c.id 
inner join customer_email ce on c.id = ce.customer_id
order by c.last_name, ce.email;

不适用于错误

ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 6:                 order by c.last_name, ce.email offset 0 limi...
                                              ^

标签: sqlpostgresqlpagination

解决方案


PostgreSQL 抱怨您的查询是正确的;你的要求不清楚。

如果您想要前 10 位客户,按姓氏订购一封电子邮件,但每个客户可以有多个电子邮件地址,您如何做到这一点?哪个电子邮件地址用于对客户进行分类?

错误消息基本上反映了这种不确定性。

提出排序顺序的明确定义并将其转换为 SQL,然后 PostgreSQL 将很乐意运行您的查询。


推荐阅读