【发布时间】: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