[英]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.