2011-09-21 2 views
0

오늘 나는 단순한 SQL 쿼리와 비슷한 것으로부터 기발한 행동을 보게되었습니다. SELECT, 몇 개의 JOIN, 하나의 필드로 ORDER BY. 지금 설명 할 수없는 것은 정렬이 LIMIT 문을 기반으로 동일한 값에 대해 변경된다는 것입니다. 예를 하나 들어 보겠습니다 :SQL 순서 단일 필드, 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 성명서를 없애 버리면 같은 결과가 나옵니다 ... 맞습니까? Nope : 172, 166, 167, 169. 한계 값을 변경하면 다른 순서로 나타납니다. LIMIT 60을 사용하면 167, 166, 172, 169를 얻을 수 있습니다.

그래서 저는 왜 동일한 값에 대해 다른 정렬 순서를 사용하려고합니까? ORDER BY에 지정된 필드로 정렬 한 후에 DB는 ID 또는 다른 것을 기반으로 정렬해야합니까? 이것은 단지 무작위로 들립니다. BTW는 데이터베이스가 PostgreSQL입니다.

답변

2

반환 된 행의 순서는 결정적이지 않습니다. 이름과 모든 반환 된 행의 이름이 같으면 행의 순서가 쿼리에서 쿼리로 변경 될 수 있습니다. 신분증으로 주문해야합니다.

+0

나는 이것으로 해결해야 할 것 같은데. – Afrosimon

관련 문제