可能重复:
Ordering MySQL results by IN sequence?
Ordering by the order of values in a SQL IN() clause
我有下表“产品”
id desc
1 BL10
2 BL15
3 BL45
4 BL50
嗯,这是我的查询SELECT * FROM Products WHERE id IN(3,1,4,2)
我希望它以IN的相同顺序显示,即3,1,4,2:
id desc
3 BL45
1 BL10
4 BL50
2 BL15
但是当我执行它时,它显示有序, 我怎么能得到它? 我正在使用MSSQL 2005
答案 0 :(得分:4)
您的IN
子句不会对结果集进行排序,而是会按照查询中遇到的顺序返回结果。
如果您愿意,可以创建一个明确的ORDER BY
,按照您想要的顺序对其进行排序:
SELECT *
FROM Products
WHERE id IN (3,1,4,2)
ORDER BY (CASE WHEN id = 3 THEN 0
WHEN id = 1 THEN 1
WHEN id = 4 THEN 2
WHEN id = 2 THEN 3 END)
(这是DBMS非特定的,但需要注意的是,如果您按特定顺序拥有更多值,那么编写屁股会很麻烦)
答案 1 :(得分:1)
SELECT * FROM Products WHERE id IN (3, 1, 4, 2)
ORDER BY FIELD (id, 3, 1, 4, 2)
答案 2 :(得分:0)
如果排序顺序不是动态的,而是产品固有的,那么您可能需要在表中使用另一个可以在ORDER BY子句中使用的SortOrder字段:
SELECT * FROM Products WHERE id IN(3,1,4,2)ORDER BY SortOrder
SortOrder的位置如下:
Id SortOrder
1 20
2 40
3 10
4 30