SQL WHERE IN(...)按列表顺序排序?

时间:2011-02-01 04:18:18

标签: sql sorting where-clause

假设我使用where子句

查询数据库
WHERE _id IN (5,6,424,2)

是否有任何方法可以按照_id列表中列出的顺序对返回的游标进行排序? _id属性从第一个到最后一个在Cursor中为5,6,424,2?

这恰好是通过ContentProvider在Android上进行的,但这可能不相关。

5 个答案:

答案 0 :(得分:3)

使用子查询选择ID列表并加入其中:


select t1.*
from t1
inner join
(
  select 1 as id, 1 as num
  union all select 5, 2
  union all select 3, 3
) ids on t1.id = ids.id
order by ids.num

UPD:代码已修复

答案 1 :(得分:1)

一种方法可能是在每个之间使用UNION执行单独的SQL查询。您显然会按照希望返回给您​​的顺序发出每个查询。

答案 2 :(得分:1)

... 按订单  当_id = 5然后1
的情况       当_id = 6然后2
 端

答案 3 :(得分:1)

您可以将其加入包含排序顺序所需列表的虚拟表

select tbl.*
from tbl
inner join (
    select 1 as sorter, 5 as value union all
    select 2, 6 union all
    select 3, 424 union all
    select 4, 2) X on tbl._id = X.value
ORDER BY X.sorter

答案 4 :(得分:1)

列表?你没有名单! ;)

此:

WHERE _id IN (5,6,424,2)

仅仅是语法糖:

WHERE (
       _id  = 5
       OR _id = 6
       OR _id = 424
       OR _id = 2
      )

SQL只有一个数据结构,即表。你的(5,6,424,2)也不是一张桌子! :)

您可以创建一个值表,但您的下一个问题是表没有任何逻辑顺序。因此,根据@ cyberkiwi的回答,您必须明确创建一个列来为排序顺序建模。并且为了使其对调用应用程序明确,请确保在查询的SELECT子句中公开此列。