今天,我从一个简单的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中指定的字段进行排序后,DB是否应该根据ID或其他内容进行排序?这听起来很随意。 BTW数据库是PostgreSQL。
答案 0 :(得分:2)
返回行的顺序不确定。因为您只按contact.Name排序,并且返回的所有行具有相同的名称,行的顺序可以从查询更改为查询。您也应该通过ID订购。