这个问题适用于Oracle DB。
我有一组作为主键的值,并希望获得这些主键的其他对应值。以下查询适用于此:
SELECT value1, value2, value3
FROM mytable
WHERE value1 IN ( 13548, 65435, 56455 )
但是,该查询以不同的顺序返回行,我希望查询以IN括号中列出的顺序返回它们。是否可以使用Oracle DB进行此操作?
答案 0 :(得分:2)
这将是一个繁琐的order by
,但你可以做这样的事情:
order by case value1 when 13458 then 1 when 65435 then 2 when 56455 then 3 end
答案 1 :(得分:2)
有一种方法可以做到:
with id_list (id, sort_order) as
(
select 13548, 1 from dual
union all
select 65435, 2 from dual
union all
select 56455, 3 from dual
)
SELECT value1, value2, value3
FROM mytable
JOIN id_list ON id_list.id = mytable.value1
ORDER BY id_list.sort_order
Oracle缺少values
行构造函数使得写入有点难看,但它基本上可以满足您的需求。添加新值时,您无需更改order by
。
答案 2 :(得分:1)
您需要一个order by子句。
如果您只是按value1排序,那么结果将按数字顺序排列,13548,56455,65435。
如果您希望以定义的非数字顺序返回列,则可以伪造order by子句。
ORDER BY CASE WHEN VALUE1 = 65435 THEN 20000 ELSE VALUE1 END
这使得65k只在订购时看起来像20k,因此它最终将介于其他两个值之间。您可以添加其他when语句来更改更多值的顺序。
in子句没有默认的排序方式。