2011-02-01 56 views
4

比方說,我有查詢數據庫與where子句SQL WHERE IN(...)按列表的順序排序?

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

有沒有辦法爲返回的光標是在排序的_id的地方在列表中列出? Cursor中第一個到最後一個的_id屬性分別爲5,6,424,2?

這恰好在Android上通過ContentProvider,但這可能不相關。

回答

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:代碼固定

+0

我認爲你需要在你的內部表中的2列。該ID與您擁有的一樣,還有一個序列列。然後按順序排序。 – lll 2011-02-01 06:20:20

+0

哎呀..是的,當然。這是我的錯誤類型。 – oryol 2011-02-01 08:50:02

1

一種方法可能是在每個SQL查詢與UNION之間執行單獨的SQL查詢。您顯然會按照您希望返回給您​​的順序發出每個查詢。

1

... 爲了通過
情況下,當_id = 5然後1
時_id = 6,然後2

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 
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子句中公開此列。