【问题标题】:SQL order single field, different result based on LIMITSQL order 单个字段,基于 LIMIT 的不同结果
【发布时间】:2011-09-21 08:42:59
【问题描述】:

今天,我从看似简单的 SQL 查询中发现了一个古怪的行为。一个 SELECT,几个 JOIN,ORDER BY 一个字段。我现在无法解释的是,对于相等的值,排序会根据 LIMIT 语句发生变化。让我举个例子:

SELECT facture.ID, [ bunch a fields ... ] FROM facture 
CROSS JOIN contact [ a few JOINs ... ] 
WHERE facture.USER_ID=usager.ID AND usager.ID=contact.USER_ID 
ORDER BY contact.NAME DESC LIMIT 50;

第一个结果将具有完全相同的名称,并按如下方式组织:166、172、167、169(ID)。如果我摆脱 LIMIT 语句,对于那些结果,我应该有相同的顺序......对吗?不:172、166、167、169。如果我改变限制的值,我也会得到不同的顺序。使用 LIMIT 60,我得到:167、166、172、169。

所以我试图理解...为什么相同值的排序顺序不同?使用 ORDER BY 中指定的字段进行排序后,数据库是否应该根据 ID 或其他内容进行排序?这听起来很随意。顺便说一句,数据库是 PostgreSQL。

【问题讨论】:

    标签: sql


    【解决方案1】:

    返回行的顺序是不确定的。由于您仅按contact.Name 排序并且返回的所有行都具有相同的名称,因此行的顺序可以从查询更改为查询。您也应该按 ID 订购。

    【讨论】:

    • 听起来我必须解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2012-11-03
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多