加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在命令两列具有相同值的列时,在postgres中出现奇怪的排序

发布时间:2020-12-12 06:33:43 所属栏目:MsSql教程 来源:网络整理
导读:我在postgres中有以下查询: SELECT * FROM "bookings"WHERE ("bookings".client_id = 50) ORDER BY session_time DESC LIMIT 20 OFFSET 0 第20位的记录与第21记录的会话时间相同. 此查询返回20个结果,但是如果将结果与整个数据库进行比较,则查询将返回第1-19
我在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,即使我没有限制或偏移问题,以确保每次运行时查询是相同的).

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读