2010-06-08 46 views
3

我需要做的SQL查詢招

select * from xxx where name in (a,b,c...); 

,但我想要的結果設置爲在(a,b,c...)順序。這可能嗎?

+0

爲什麼你首先需要這個? – 2010-06-08 22:27:07

+0

該列表以任意順序排列,只是好奇 – user157195 2010-06-08 22:28:54

+0

什麼RDBMS?我確實看到了一種方式發佈在MySQL – 2010-06-08 22:40:00

回答

0

啊 - 我明白了。你可以做一些可怕的事情與案件陳述,然後命令的..你會有效地添加另一列到您的查詢是一個「秩序」,然後你可以「排序」

它的醜陋,但如果你控制了查詢,並在「在」條款是低的,它可以工作的數量(beleive一個「在」條款被限制在255個字符)

如「IF name = a then 1 else if name = b then 2」

做不到這一點,可能最好使用類似的技術在客戶端排序(假設客戶端首先將信息注入'in'子句中)

-Ace

+1

,因爲列表的順序是任意的 – user157195 2010-06-08 22:28:13

+0

因爲這不能回答我建議用這個問題來評論的問題 – 2010-06-08 22:29:28

3

我發現這個問題,這是看起來像你原來的問題:Ordering by the order of values in a SQL IN() clause

+0

我相信那個解決方案是特定於mysql的,這可能會造成問題。 – luke 2010-06-08 22:48:22

+0

由於他沒有告訴他使用了哪個RDBMS,我問他是否使用MySQL。如果沒有,通過使用MySQL函數字段作爲他的搜索參考,將更容易找到解決方案。 – 2ndkauboy 2010-06-08 22:53:04

0

做這將是DB-具體的方法。

在Oracle中,你可以這樣做:

SELECT * FROM xxx 
where name in (a,b,c...) 
ORDER BY DECODE(name,a,1,b,2,c,3); 
0

陳述是相當有限的,但你可以通過加入一個子查詢得到類似的效果。

這裏有一個例子:

SELECT x.* 
FROM xxx as x 
    INNER JOIN ((select a as name, 1 as ord) 
       UNION 
       (select b as name, 2 as ord) 
       UNION 
       (select c as name, 3 as ord)) as t 
     ON t.name = x.name 
ORDER BY t.ord 

它很醜陋,但它應該工作在幾乎所有的SQL數據庫。 ord字段明確允許您設置結果的順序。某些數據庫(如SqlServer)支持ROWINDEX功能,因此您可以使用它來清理它。