如何使用IN命令保留SQL查询的顺序

Rob*_*ert 4 sql sqlite

SELECT * FROM tblItems
WHERE itemId IN (9,1,4)
Run Code Online (Sandbox Code Playgroud)

以SQL找到它们的顺序返回(恰好是1,4,9)但是,我希望它们按照我在数组中指定的顺序返回.

我知道我可以用我的母语(obj c)对它们进行重新排序,但是在SQL中有一种巧妙的方法吗?

这样的事情会很棒:

ORDER BY itemId (9,1,4) --    <-- this dosn't work :)
Run Code Online (Sandbox Code Playgroud)

小智 5

可能最好的方法是创建一个项目ID表,其中还包括排名顺序.然后,您可以按排名顺序加入和排序.

创建一个这样的表:

 itemID rank
 9      1
 1      2
 4      3
Run Code Online (Sandbox Code Playgroud)

然后您的查询将如下所示:

select tblItems.* from tblItems
    inner join items_to_get on
        items_to_get.itemID = tblItems.itemID
    order by rank
Run Code Online (Sandbox Code Playgroud)


Dan*_*cuk 0

您可以将 case 构造添加到 select 子句中。

select case when itemid = 9 then 1
when itemid = 1 then 2 else 3 end sortfield
etc
order by sortfield
Run Code Online (Sandbox Code Playgroud)