例如我在表EMPLOYEE:
(code, name)
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )
如果您这样做:(从EMPLOYEE中选择*),您将获得:
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )
如果您这样做:(从EMPLOYEE中选择*,您将获得(1,3,2,4)中的代码:
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )
如何按IN子句中的CSV值顺序获取它,按原样?
(1, 'Jimmy')
(3, 'Michelle')
(2, 'Albert')
(4, 'Felix' )
答案 0 :(得分:18)
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
答案 1 :(得分:1)
此问题的一般解决方案是保留基于输入(CSV)文件的订单,即在表格中添加AUTO_INCREMENT
列,并根据该列进行排序。您可能永远不会将其显示为查询的一部分,但您可以在导入后在其上订购以获取输入文件中的原始订单。