2013-10-10 82 views
0

每當我跑了同時含有LIMITORDER BY關鍵字,我得到取決於LIMIT子句中指定的項目數不一致結果的查詢:PostgreSQL的:LIMIT +順序返回不一致的結果

例如,下面的查詢:

SELECT "people"."name" 
FROM "people" 
WHERE "people"."type" = 2 
ORDER BY score desc, number desc 
LIMIT 50 

給了我這個結果:

[John, Jack, Amy, Brad, Tom, ...] 

(John和插孔b他們的scorenumber屬性的值相同。所以做艾米,布拉德,湯姆,其實)

現在,當我運行:

SELECT "people"."name" 
FROM "people" 
WHERE "people"."type" = 2 
ORDER BY score desc, number desc 
LIMIT 5 

我得到以下結果:

[Jack, John, Tom, Amy, Brad] 
+0

如果你問一個關於Postgres的問題與MySQL爲什麼你這個標記添加輔助訂單? –

回答

4

當值的順序​​是同樣,數據庫可以決定下一個排序是什麼,它有可能會改變同一個查詢的多次運行。

嘗試通過

ORDER BY score, name 
+0

是的,我想的很多。但是你的解決方案不能解決問題。我需要它通過分數desc和名稱desc進行排序。您是否碰巧知道強迫它執行一致的訂單 – user2158382

+5

@ user2158382:您*有*指定在某個地方基本上是唯一的列的組合。你可以包括例如主鍵作爲最後一個排序列以便「解析」重複的排序。 –

+0

啊我看得很完美。這聽起來像個好主意,我不知道爲什麼我沒有想到這一點。 – user2158382

相關問題