這個非常簡單的查詢:爲什麼這個簡單的MySQL查詢排序「本身」
SELECT * FROM table WHERE widget_id IN (10212, 10217, 10218, 10215, 10213);
決定輸出數字順序記錄...
10212
10213
10215
10217
10218
時候我會已經預計並要求它以我已經將它們包括在IN子句中的順序輸出記錄。
這就好像我追加了ORDER BY widget_id
- 當我故意沒有。
有人請說明這個SQL新手爲什麼發生這種情況,以及如何讓它按我的方式!
這不是SQL的工作原理。 IN子句只是一種方便的語法,而不是一系列的OR來限制結果。其中的項目順序未被考慮在內。如果您沒有指定任何其他順序,輸出順序可能恰好是它們添加到表中的順序。 – ADyson
默認順序是按照插入順序(假設沒有更新,刪除等)。如果您需要特定訂單,您絕不應該依賴此訂單。在這種情況下總是使用ORDER BY。 – mcriecken
如果您的查詢中不包含「ORDER BY」子句,則結果可能會以任何順序返回。隨着行的添加和從表中刪除,排序可能會隨時間而改變。如果訂單對查詢很重要,則必須包含一個「ORDER BY」子句。 – JSR