当前位置: 首页 > 面试题库 >

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

华安民
2023-03-14
问题内容

我有下表

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)

问题答案:

正如另一个答案所提到的:您发布的查询与您想要的结果顺序无关,而只是您想要的结果。

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

SELECT * FROM foo f where f.id IN (2, 3, 1)
ORDER BY FIELD(f.id, 2, 3, 1);

FIELD的参数列表可以是可变长度。



 类似资料:
  • 问题内容: 我想运行一个简单的查询,以抛出所有其他表()的列中不存在主体列值的行。 我尝试使用: 而是抛出语法错误。Google搜索使我进入了一个论坛,那里的人们说MySQL不支持,因此需要使用一些极其复杂的东西。这是真的?还是我犯了一个可怕的错误? 问题答案: 要使用IN,您必须有一个set,请改用以下语法:

  • 问题内容: 我已经开发了使用OR查询的系统: 与查询IN进行比较: MYSQL数据库中最好的查询是什么? 问题答案: 用于。 IN将使用索引。 否则(afaik)将不使用索引。 另外,这一点不容忽视,IN版本: 使用更少的代码 更容易维护 更容易理解 仅出于这些原因,我准备为获得代码质量而遭受一点性能损失,但实际上您也获得了性能。

  • 问题内容: 我很好奇为何应该比更快地执行。 当比尔·卡尔文提出一个要点时,我正在回答一个问题。当您使用它时,它使用相关子查询(依赖子查询),而IN()仅使用子查询。 解释显示,并且两者都使用了一个依赖子查询,并且都只使用了一个子查询..所以我很好奇关联子查询如何比子查询更快? 我以前使用过EXISTS,它的执行速度比IN快,这就是我感到困惑的原因。 这是带有说明的SQLFIDDLE 一些问题 在上

  • 目前,我正在测试一个具有CRUD操作的类(例如)。按照后面使用的方法,我想按照创建、读取、更新和删除的顺序测试所有操作。 由于JUnit中测试用例的执行顺序依赖于JVM,所以我需要一些适当的方法来确保单元测试用例按照给定的顺序执行。 到目前为止,我提出了以下策略: > 在JUnit4中使用按名称的升序执行方法。然而,这需要重命名测试用例,而且对我来说似乎不是最好的方法,因为在未来需要添加更多的测试

  • 本文向大家介绍mySQL中in查询与exists查询的区别小结,包括了mySQL中in查询与exists查询的区别小结的使用技巧和注意事项,需要的朋友参考一下 一、关于exists查询 以上是一个典型的exists查询的sql语句。 它的作用方式是这样的:每次从vendor表中查询出一条数据,然后将这条数据中的vendor_prov_code值传递到exists查询中进行执行,也就是进行子查询的执

  • 问题内容: 以下两个查询是子查询。两者相同,都对我有效。但是问题是方法1的查询大约需要10秒才能执行,而方法2的查询不到1秒。 我能够将方法1的查询转换为方法2,但是我不了解查询中正在发生什么。我一直想自己弄清楚。我真的很想了解以下两个查询之间的区别是什么,以及如何获得性能提升?它背后的逻辑是什么? 我是这些高级技术的新手。我希望有人能在这里帮助我。考虑到我阅读的文档并没有给我任何提示。 方法1: