【发布时间】:2019-02-19 17:42:33
【问题描述】:
我正在尝试根据 Postgres 数据库中的数据实现基于光标的分页列表。
例如,假设我有一个包含以下列的表格:
id | firstname | lastname
我想对这些数据进行分页,如果我只想按 id 对其进行排序,这将非常简单,但就我而言,我希望选择按姓氏排序,并且可以保证有多个人使用同姓。
如果我有如下的选择语句:
SELECT * FROM people
ORDER BY lastname ASC;
在这种情况下,我可以让我的编码光标包含有关 lastname 的信息,这样我就可以从我离开的地方继续,但由于会有多个用户具有相同的姓氏,这将是错误的。 SQL 中有没有办法只在有序列表中的某个 id 之后获取结果,而不是排序结果的列?
select 语句的示例结果:
1 | John | Doe
4 | John | Price
2 | Joe | White
6 | Jim | White
3 | Sam | White
5 | Sally | Young
如果我想要页面大小为 3,我无法添加 WHERE lastname <= :lastname,因为我会在列表中有重复的数据,因为它会在调用期间返回 ids 2、6 和 3。在我的情况下,如果我可以在查询中添加类似于 AFTER id = 6 的内容会很有帮助,它可以跳过所有内容,直到在有序列表中找到 id。
【问题讨论】:
标签: sql postgresql sorting pagination