【问题标题】:SQL Sort Order by The Order Specified In the QuerySQL 按查询中指定的顺序排序
【发布时间】:2010-08-03 18:31:30
【问题描述】:

假设我有一个查询“select * from clauses where id in (0,2,5,1,3)”,我实际上希望行返回的顺序与它们在 where 子句中指定的顺序相同。 ID 的顺序会随着查询的变化而变化,并且顺序没有模式。

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

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

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

【问题讨论】:

  • 这是否必须在查询中完成,或者调用查询的任何内容都可以这样做?

标签: sql mysql sql-server sorting


【解决方案1】:

在 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

【讨论】:

  • 是的,建立案例陈述会很棘手,但我看不出有什么出路:(
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多