sql – 在命令两列具有相同值的列时,在postgres中出现奇怪的排序错误(这是一个错误吗?)

前端之家收集整理的这篇文章主要介绍了sql – 在命令两列具有相同值的列时,在postgres中出现奇怪的排序错误(这是一个错误吗?)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在postgres中有以下查询
SELECT * 
FROM "bookings"
WHERE ("bookings".client_id = 50) 
ORDER BY session_time DESC 
LIMIT 20 OFFSET 0

第20位的记录与第21记录的会话时间相同.

查询返回20个结果,但是如果将结果与整个数据库进行比较,则查询将返回第1-19个结果,第21个结果将跳过第20个结果.

可以通过在订单中添加“id”来修复此查询

SELECT * 
FROM "bookings" 
WHERE ("bookings".client_id = 50) 
ORDER BY session_time DESC,id 
LIMIT 20 OFFSET 0

但是我想知道这个bug是怎么发生的?在使用抵消和限额时,postgres如何订购相同的字段?它是随机的吗?这是postgres的错误吗?

解决方法

这不是一个错误.在排序之后发生限制和偏移,并且在一种情况下选择哪一行与另一种情况不确定.一般来说,你希望有一个决胜局,以便你的订购稳定和确定(我更喜欢使用独特的tiebreakers,即使我没有限制或偏移问题,以确保每次运行时查询是相同的).

如果您正在进行分页,请将主键或代理键添加到排序中作为决胜局.这真是最好的方式.

猜你在找的MsSQL相关文章