SQL按查询中指定的顺序排序

ore*_*ake 1 mysql sql sql-server sorting

假设我有一个查询"select*from where where where in(0,2,5,1,3)",我实际上希望以相同的顺序返回它们指定where子句的行.ID的顺序将从查询更改为查询,并且订单没有模式.

我知道可以改变数据模型,创建临时表等.但请相信我,这些类型的解决方案在我的情况下不起作用.我也无法改变应用程序代码中结果对象的顺序.

我也知道不同的数据库引擎对事物的排序方式不同,在某些情况下无法保证等等等等.我只想不,这可能吗?

如果有帮助我将使用mysql或sql server :)

OMG*_*ies 6

在MySQL上,您可以使用FIND_IN_SET:

ORDER BY FIND_IN_SET(id, '0,2,5,1,3')
Run Code Online (Sandbox Code Playgroud)

最便携的排序方式是使用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
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 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
Run Code Online (Sandbox Code Playgroud)