【发布时间】:2016-05-11 11:31:44
【问题描述】:
我希望服务器按照我发送查询的顺序给我查询结果。
所以如果我写:
SELECT * FROM table WHERE column in (9,1,8)
我希望它按以下顺序给我结果:9,1,8
【问题讨论】:
-
请用您正在使用的数据库标记您的问题。
标签: sql select sql-order-by
我希望服务器按照我发送查询的顺序给我查询结果。
所以如果我写:
SELECT * FROM table WHERE column in (9,1,8)
我希望它按以下顺序给我结果:9,1,8
【问题讨论】:
标签: sql select sql-order-by
一种方法使用left join:
select t.*
from (select 9 as c, 1 as priority union all select 1, 2 union all select 8, 3
) vals left join
table t
on t.column = vals.c
order by vals.priority;
注意:这是通用语法。子查询的具体语法可能因数据库而异。
另一种方法在order by中使用case:
select t.*
from table t
where t.column in (9, 1, 8)
order by (case column when 9 then 1 when 1 then 2 when 8 then 3 end);
再一次,这可以在某些数据库中进行简化,比如使用特殊函数。
【讨论】:
你可以按照你想要的顺序使用CASE 表达式,比如:
select *
from table_name
where column_name in (9,1,8)
order by case column_name
when 9 then 1
when 1 then 2
when 8 then 3 end
, column_name -- optional, but here could go another column if you want to have custom order
【讨论】:
如果你有,你可以在 Oracle SQL 中做
SELECT Column_name
FROM user_tab_columns
where table_name = 'MY_TABLE'
and Column_id in (9,1,8)
【讨论】:
SELECT *
FROM table
WHERE column IN (9, 1, 8)
ORDER BY CASE WHEN column = 9 THEN 1
WHEN column = 1 THEN 2
WHEN column = 8 THEN 3
END
【讨论】: