一尘不染

PostgreSQL-从LIMIT OFFSET重复行

sql

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

当我运行此查询时:

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”?


阅读 217

收藏
2021-03-17

共1个答案

一尘不染

为什么在两个查询中都出现“ foo”?

因为返回的所有行的列均具有相同的值status。在这种情况下,数据库可以自由以其想要的任何顺序返回行。

如果您想要可重复的订单,则需要在order by语句中添加第二列以使其一致。例如ID列:

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

如果两行的状态列的值相同,则它们将按ID排序。

2021-03-17