2010-08-25 29 views
3

可能重複:
Ordering MySQL results by IN sequence?
Ordering by the order of values in a SQL IN() clause查詢沒有自動排序

我有以下的表稱爲 「產品」

id desc 
1 BL10 
2 BL15 
3 BL45 
4 BL50 

很好,這是我的查詢SELECT * FROM Products WHERE id IN(3,1,4,2) 我想它顯示在IN子句中的順序相同,即3,1,4,2:

id desc 
3 BL45 
1 BL10 
4 BL50 
2 BL15 

但是當我執行它,它顯示有序, 如何才能得到呢? 我使用MSSQL 2005

+1

取決於它是否是相關 – 2010-08-25 20:23:43

+1

什麼是您使用RDBMS的MySQL? – 2010-08-25 20:24:09

+0

MySQL,SQL Server,Oracle? – 2010-08-25 20:26:51

回答

1
SELECT * FROM Products WHERE id IN (3, 1, 4, 2) 
ORDER BY FIELD (id, 3, 1, 4, 2) 
4

IN條款將不排序結果集,而是你的結果將在他們在查詢時遇到的順序返回。

如果你願意,你可以創建一個明確的ORDER BY它在你想要的順序進行排序:

SELECT * 
FROM Products 
WHERE id IN (3,1,4,2) 
ORDER BY (CASE WHEN id = 3 THEN 0 
       WHEN id = 1 THEN 1 
       WHEN id = 4 THEN 2 
       WHEN id = 2 THEN 3 END) 

(這是DBMS非特異的,需要提醒的是它會是一個痛苦的屁股如果您想要按特定順序獲取更多值,則需要編寫)

+0

我正在使用mssql 2005 – GuzZpaWn 2010-08-25 20:29:35

+2

那麼只有一個痛苦,如果它不是動態執行;-) – 2010-08-25 20:30:14

+0

+1爲ANSI-SQL版本...... – 2010-08-25 20:30:49

0

如果排序順序不是動態的,但對於產品來說是固有的,那麼您可能需要表中的另一個字段用於SortOrder,您可以在ORDER中使用BY子句:

SELECT * FROM產品WHERE ID IN(3,1,4,2)ORDER BY SortOrder的

凡SortOrder的是這樣的:

Id SortOrder 
1 20 
2 40 
3 10 
4 30