假設類似的數據:MySQL查詢與秩序和限制
table: shapes
id type
----------------
1 Square
2 Rectangle
3 Square
4 Square
當我執行以下查詢:
SELECT `shapes`.* FROM `shapes` WHERE `shapes`.`type` = 'Square' ORDER BY shapes.id DESC LIMIT 1
我希望接收與ID行:4。沒想到,我M個接收一排ID:1
對於真是個奇怪的一部分:如果我和LIMIT 2
執行相同的查詢:
SELECT `shapes`.* FROM `shapes` WHERE `shapes`.`type` = 'Square' ORDER BY shapes.id DESC LIMIT 2
該組2中的第一行實際上是正確的行!
爲了增加奇怪性,我在同一個MySQL服務器中有另一個這個數據庫的副本,它返回任何限制查詢的正確行,LIMIT 1
或其他。
我可以得到的唯一答案是轉儲並重新加載數據庫,但我想了解爲什麼在採取該操作之前發生這種情況,如果可能的話。
tl; dr:LIMIT 1
返回錯誤的行。 LIMIT 2
返回正確的行(第一個)。似乎是數據庫特定的。
經過進一步的審查,一位同事幫助發現了另一個奇怪之處。如果我在查詢中設置了「限制2」而不是「限制1」,則返回正確的最終結果。更不正當的是,當我在同一個MySQL實例中的不同數據庫中的類似數據集上運行相同的查詢時,查詢將返回正確的數據。我現在認爲這個問題是孤立於單個MySQL數據庫的,但是對於什麼會導致這種行爲感到困惑。 – 2011-05-23 15:02:09
(我編輯了這個問題以反映上面的發現,並刪除了與問題無關的Rails干擾項) – 2011-05-23 15:28:29
試圖修復/分析表? – 2011-05-24 06:16:24