【问题标题】:SQL search results in order of what was searchedSQL 搜索结果按搜索顺序排列
【发布时间】:2016-05-11 11:31:44
【问题描述】:

我希望服务器按照我发送查询的顺序给我查询结果。

所以如果我写:

SELECT * FROM table WHERE column in (9,1,8)

我希望它按以下顺序给我结果:9,1,8

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题。

标签: sql select sql-order-by


【解决方案1】:

一种方法使用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);

再一次,这可以在某些数据库中进行简化,比如使用特殊函数。

【讨论】:

    【解决方案2】:

    你可以按照你想要的顺序使用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
    

    【讨论】:

      【解决方案3】:

      如果你有,你可以在 Oracle SQL 中做

      SELECT Column_name
      FROM user_tab_columns
      where table_name = 'MY_TABLE'
      and Column_id in (9,1,8)
      

      【讨论】:

        【解决方案4】:
        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-19
          • 1970-01-01
          • 1970-01-01
          • 2016-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-04
          相关资源
          最近更新 更多