2011-09-21 51 views
0

今天我遇到了一个古怪的行为,看起来像一个简单的SQL查询。一个SELECT,一些JOIN,一个字段的顺序。我现在无法解释的是,根据LIMIT声明,排序会发生相同的值。我给大家举一个例子:SQL order单字段,基于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。如果我改变极限值,我也会得到不同的顺序。有限制60,我得到:167,166,172,169。

所以我想了解...为什么不同的排序顺序相同的值?在使用ORDER BY中指定的字段进行排序后,数据库是否应根据ID或其他内容进行排序?这听起来是随机的。 BTW数据库是PostgreSQL。

回答

2

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

+0

听起来就像我必须解决这个问题。 – Afrosimon