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

时间:2010-08-03 18:31:31

标签: sql mysql sql-server sorting

假设我有一个查询“select * from where where where in(0,2,5,1,3)”,我实际上想要按照指定where子句的相同顺序返回的行。 ID的顺序将从查询更改为查询,并且订单没有模式。

我知道可以改变data model, create temp tables, etc。但请相信我,这些类型的解决方案在我的情况下不起作用。我也无法在应用程序代码中更改结果对象的顺序。

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

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

2 个答案:

答案 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