是否可以保留“IN”条件子句的顺序?

我在SO上找到了this question,但在他的示例中,OP已经有一个已排序的“IN”子句。

我的情况不同,“IN”子句的顺序随机
像这样的东西:

SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField IN (45,2,445,12,789)

我想按(45,2,445,12,789)顺序检索结果。我正在使用Oracle数据库。 SQL中可能有一个属性,我可以将其与条件子句一起使用以指定保持子句的顺序。

最佳答案

除非您使用ORDER BY子句..否则不会有可靠的排序。

SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField IN (45,2,445,12,789)
order by case TestResult.SomeField
         when 45 then 1
         when 2  then 2
         when 445 then 3
         ...
         end

您可以将查询分为5个查询并集在一起,尽管...
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField = 4
union all
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField = 2
union all
...

我更相信前一种方法,它可能会更好。

10-08 20:04