我注意到分页记录集中有一些重复的行.

当我运行此查询时:

SELECT "students".* 
FROM "students" 
ORDER BY "students"."status" asc 
LIMIT 3 OFFSET 0

我得到:

    | id | name  | status |
    | 1  | foo   | active |
    | 12 | alice | active |
    | 4  | bob   | active |

下一个查询:

SELECT "students".* 
FROM "students" 
ORDER BY "students"."status" asc 
LIMIT 3 OFFSET 3

我得到:

    | id | name  | status |
    | 1  | foo   | active |
    | 6  | cindy | active |
    | 2  | dylan | active |

为什么两个查询中都出现"foo"?

推荐答案

为什么两个查询中都出现"foo"

因为返回的所有行对于status列具有相同的值.在这种情况下,数据库可以按照它想要的任何顺序自由返回行.

如果你想要一个可复制的排序,你需要在order by语句中添加第二列,使其一致.例如,ID列:

SELECT students.* 
FROM students 
ORDER BY students.status asc, 
         students.id asc

如果两行的status列具有相同的值,则它们将按id排序.

Postgresql相关问答推荐

尽管Jooq已经是uuid类型,Jooq仍会启用我的UID,为什么?

使用多个分隔符拆分SQL

有没有一种方法可以在参数中添加密码,并在批处理文件中需要时自动获取密码?

select语句的Jooq代码生成

MERGE 语句的锁定级别

Postgis 不只使用索引扫描

从具有加权行概率的 PostgreSQL 表中 Select 随机行

我可以使用 Rails 将数组存储在 hstore 中吗

Windows PSQL 命令行: is there a way to allow for passwordless login?

在postgres的同一列中存储不同数据类型的合理方法?

SQLAlchemy、Psycopg2 和 Postgresql 复制

将 SELECT 结果作为参数传递给 postgreSQL 函数

SQLAlchemy 和多个进程的连接问题

获取 psycopg2 count(*) 结果数

在 Postgresql 中按窗口函数结果过滤

带有 WITH 子句的查询时出现 Postgresmissing FROM-clause entry错误

postgres regexp_replace 只想允许 a-z 和 A-Z

PostgreSQL:从转储中恢复数据库 - 语法错误

Android 的 JDBC 与 Web 服务

在 Select (PostgreSQL/pgAdmin) 中将布尔值返回为 TRUE 或 FALSE