簡體   English   中英

如何使用IN命令保留SQL查詢的順序

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM