sql - 如何按IN子句的顺序选择mysql行

标签 sql mysql sql-order-by

例如我在表 EMPLOYEE 中有:

(code, name)
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

如果您这样做:(从 EMPLOYEE 中选择 *)您将获得:

(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

如果您这样做:(select * from EMPLOYEE where code in (1,3,2,4) 您将得到:

(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

如何按原样在 IN 子句中按 CSV 值的顺序获取它?

(1, 'Jimmy')
(3, 'Michelle')
(2, 'Albert')
(4, 'Felix' )

最佳答案

使用 FIND_IN_SET function :

SELECT e.* 
  FROM EMPLOYEE e 
 WHERE e.code in (1,3,2,4) 
ORDER BY FIND_IN_SET(e.code, '1,3,2,4')

或者使用 CASE 语句:

SELECT e.* 
  FROM EMPLOYEE e 
 WHERE e.code in (1,3,2,4) 
ORDER BY CASE e.code
           WHEN 1 THEN 1 
           WHEN 3 THEN 2
           WHEN 2 THEN 3
           WHEN 4 THEN 4
         END

关于sql - 如何按IN子句的顺序选择mysql行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4986731/

相关文章:

mysql - 选择两列中较小的日期时间

javascript - 每 X 秒使用 mysql 数据更新 google java map

sql - 在sql server中查找特定数据的最大值

MySQL ORDER BY 第一个字段然后第二个字段

mysql order by,先为null,后为DESC

sql - 在同一域的两台主机上的 Windows 和 Linux 服务器之间进行身份验证 - 可能吗?

MySql 为搜索过滤器准备sql语句

sql - 将日期与字符串组合

java - 复合主键和数据截断错误

c# - 用于搜索多列的 MySQL 索引