7
A
回答
20
你可以使用FIND_IN_SET做到這一點,例如
SELECT * FROM T WHERE T.id IN(4,78,12,45)
ORDER BY FIND_IN_SET(T.id,'4,78,12,45');
雖然您必須複製列表,但如果您在代碼中生成查詢,這不是一個大問題。
1
在一般情況下,你不能。除非使用ORDER BY
子句,否則SQL不保證順序,並且它不能與IN
語句的內容捆綁在一起。
但是,如果您可以構建一個臨時表來對您選擇的值進行排序,則可以加入該表並按順序排序。
例如,您有一個包含類似於下面的一個臨時表:
id | order
----+------
4 | 1
78 | 2
12 | 3
45 | 4
然後你可以訂購它是這樣的:
SELECT T.*
FROM T
INNER JOIN temp
ON T.id = temp.id
ORDER BY temp.order ASC
+0
雖然我喜歡Paul Dixon提供的解決方案的清潔度。這可能更容易理解,甚至可能更快。 – 2009-09-03 11:40:31
0
您不能通過IN子句進行排序。您必須提供一個單獨的ORDER BY子句。通過在ORDER BY中構建一個case語句來實現這一點的方法如下。雖然這並不漂亮。
SELECT
*
FROM
T
WHERE
T.Id IN(4, 78, 12, 45)
ORDER BY
CASE
WHEN T.Id = 4 THEN 1
WHEN T.Id = 78 THEN 2
WHEN T.Id = 12 THEN 3
WHEN T.Id = 45 THEN 4
END
相關問題
- 1. MySQL IN()子句多個返回
- 2. MySQL會以IN子句中爲了fetchin
- 3. MySQL的IN子句具體和一般的記錄
- 4. 如何爲'where value in'子句中的每個項目返回記錄?
- 5. 優化MySQL查詢與IN子句爲10000條記錄
- 6. MySQL的IN子句
- 7. 將記錄集返回爲Oracle的HTML
- 8. TSQL - IN子句返回空時的替代結果集
- 9. 在SQL中返回記錄,其中包含來自IN子句的所有值
- 10. 將IN子句總是返回相同的順序在MySQL
- 11. 記錄集只返回1000條記錄
- 12. 恢復所有記錄,包括使用MySQL IN子句複製
- 13. IN子句只返回1行
- 14. SQL子查詢返回NULL IN語句
- 15. Linq to sql - 返回記錄子集和記錄總數的最佳方式
- 16. MySQL存儲過程只返回記錄與子記錄
- 17. MySQL的UNION VS IN子句
- 18. MySQL的:使用IN子句
- 19. MySQL返回錯誤記錄
- 20. 來自記錄集的子句
- 21. SQL IN子句 - 空集
- 22. python「in」語句自動返回爲真
- 23. Node.js和mysql返回語句
- 24. MySQL查詢與IN子句
- 25. MYSQL IN子句錯誤
- 26. MYSQL IN子句問題
- 27. 慢MySQL查詢/ IN子句
- 28. MYSQL加入IN子句
- 29. 具有空子集的Tsql IN子句
- 30. SQL WHERE ... IN記錄集
+1教我關於我不瞭解MySQL的一些信息! – Welbog 2009-09-03 11:36:29
+1非常乾淨!我喜歡它,希望SQL服務器有它。 – 2009-09-03 11:37:57
對於這樣的小案例,這應該是非常有效的,但是如果您的選擇列表很大,我會想象臨時表方法將會更加高效。 – 2009-09-03 12:38:21