2010-08-25 51 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