开发者社区> 问答> 正文

在MySQL“ IN”查询中维护顺序?mysql

我有下表

DROP TABLE IF EXISTS test.foo; CREATE TABLE test.foo ( id int(10) unsigned NOT NULL auto_increment, name varchar(45) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 然后我尝试根据主键获取记录

SELECT * FROM foo f where f.id IN (2, 3, 1); 然后我得到以下结果

+----+--------+ | id | name | +----+--------+ | 1 | first | | 2 | second | | 3 | third | +----+--------+ 3 rows in set (0.00 sec) 可以看到,结果按ID排序。我试图实现的结果是按照查询中提供的顺序对结果进行排序。给定这个例子,它应该返回

+----+--------+ | id | name | +----+--------+ | 2 | second | | 3 | third | | 1 | first | +----+--------+ 3 rows in set (0.00 sec)

展开
收起
保持可爱mmm 2020-05-17 21:25:44 1184 0
1 条回答
写回答
取消 提交回答
  • 您发布的查询与您想要的结果顺序无关,而只是您想要的结果。

    为了订购您的结果,我将使用ORDER BY FIELD():

    SELECT * FROM foo f where f.id IN (2, 3, 1) ORDER BY FIELD(f.id, 2, 3, 1); FIELD的参数列表可以是可变长度。来源:stack overflow

    2020-05-17 21:32:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像