[英]How do I preserve the order of a SQL query using the IN command
SELECT * FROM tblItems
WHERE itemId IN (9,1,4)
以SQL查找它们的顺序返回(恰好是1、4、9),但是,我希望它们以我在数组中指定的顺序返回。
我知道以后可以使用本机语言(obj c)对它们进行重新排序,但是在SQL中有一种巧妙的方法吗?
这样的事情会很棒:
ORDER BY itemId (9,1,4) -- <-- this dosn't work :)
可能最好的方法是创建一个项目ID表,其中还包括一个排名顺序。 然后,您可以按排名顺序加入并进行排序。
创建一个这样的表:
itemID rank
9 1
1 2
4 3
然后您的查询将如下所示:
select tblItems.* from tblItems
inner join items_to_get on
items_to_get.itemID = tblItems.itemID
order by rank
使用CASE表达式将ID值映射到递增的序列:
... ORDER BY CASE itemId
WHEN 9 THEN 1
WHEN 1 THEN 2
ELSE 3
END
您可以将case构造添加到select子句中。
select case when itemid = 9 then 1
when itemid = 1 then 2 else 3 end sortfield
etc
order by sortfield
我曾经在mysql环境中执行过相同的任务。
我最终使用
ORDER BY FIND_IN_SET(itemID, '9,1,4')
从那时起,这为我工作。 我希望它也适用于sqlite
您可以创建一个过程来对SQL中的数据进行排序,但这将比其本国语言复杂得多。
有没有“整洁的方式”诉诸于SQL这样的数据-在WHERE
一个子句SELECT
简单地说,“如果这些标准都匹配,包括行”; 它不是(也不能是)订购标准。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.