我有一个SQL查询,如下所示:
SELECT * from Ask where Number IN 1,3,2
这会将结果返回为1,2,3,而不是1,3,2。
有没有办法强制匹配的记录集保留查询顺序?
您可以在order by
子句中使用case
表达式:
select *
from ask
where num in (1,3,2)
order by case num
when 1 then 1
when 3 then 2
when 2 then 3
end
根据您的数据库,可能会提供语法快捷方式。
Oracle有decode()
:
order by decode(num, 1, 1, 3, 2, 2, 3)
MySQL具有field()
:
order by field(num, 1, 3, 2)
旁注:num
是许多数据库中的语言关键字。我在查询中将其重命名为num
。