0

有没有办法订购结果(例如)

SELECT id,age, Location
FROM Student 
WHERE Location in ('NY','DC','MI','TE')

而不是让它们作为

id     age     Location
1       2       DC
2       2       NY
4       2       MI
6       2       TE

结果应按 ('NY','DC','MI','TE') 中的顺序排列:

id     age     Location
2       2       NY
1       2       DC
4       2       MI
6       2       TE

我认为有一个临时表并将其插入 ('NY','DC','MI','TE')到该表中是可能的。然后使用左连接将根据需要对其进行排序。

有没有更好的解决方案。

请指教。

4

3 回答 3

3

在 MySQL 中,这可以使用 来完成FIND_IN_SET,它返回第二个参数中第一个参数出现的索引,后者是一个包含逗号分隔值的字符串。

我认为同样的事情应该可以使用CHARINDEX- 试试这个:

SELECT id, age, location
FROM student 
WHERE location IN ('NY','DC','MI','TE')
ORDER BY CHARINDEX (location, 'NY,DC,MI,TE')
于 2013-03-25T15:54:23.073 回答
-1

假设您不必从表中选择城市代码,请尝试以下操作:

ORDER BY FIELD(Location,'NY','DC','MI','TE')
ORDER BY FIND_IN_SET(Location,'NY,DC,MI,TE')
ORDER BY LOCATE(CONCAT(',',Location,','),',NY,DC,MI,TE,')
ORDER BY Location IN ('NY','DC','MI','TE')

IN也可以接受子查询 ( ORDER BY Location IN SELECT city_code FROM ...)

于 2013-03-25T16:03:42.600 回答
-1

任何解决方案都大致相当于使用临时表。您可以使用 CTE 或子查询,但本质上您使用不同的语法来执行相同的操作。

于 2013-03-25T15:57:46.357 回答