假设我有一个查询“select * from where where where in(0,2,5,1,3)”,我实际上想要按照指定where子句的相同顺序返回的行。 ID的顺序将从查询更改为查询,并且订单没有模式。
我知道可以改变data model, create temp tables, etc。但请相信我,这些类型的解决方案在我的情况下不起作用。我也无法在应用程序代码中更改结果对象的顺序。
我也知道不同的数据库引擎对事物的排序方式不同,在某些情况下无法保证等等等等。我只想不,这可能吗?
如果有帮助,我将使用mysql或sql server:)
答案 0 :(得分:6)
在MySQL上,您可以使用FIND_IN_SET:
ORDER BY FIND_IN_SET(id, '0,2,5,1,3')
最便携的订购方式是使用CASE表达式:
ORDER BY CASE id
WHEN 0 THEN 1
WHEN 2 THEN 2
WHEN 5 THEN 3
WHEN 1 THEN 4
WHEN 3 THEN 5
END
答案 1 :(得分:5)
Select ..
From Clauses
Where Id In(0,2,5,1,3)
Order By Case Id
When 0 Then 1
When 2 Then 2
When 5 Then 3
When 1 Then 4
When 3 Then 5
...
End