mysql - 使结果排序与给定的 WHERE IN(a,b,c) 条件匹配的查询

标签 mysql database sql-order-by

我正在做一些工作来使用 MySQL 数据库填写文档。我想要做的是根据给定的 WHERE 条件生成结果。以下学生表:

                  student
+-----+------------+-----------------+-----+
| id  |  nickname  |   student_name  | ... |
+-----+------------+-----------------+-----+
|  1  |     Joy    |     Anderson    | ... |
|  2  |    Prank   |     Campbell    | ... |
+-----+------------+-----------------+-----+

我向数据库提出了以下查询:

SELECT nickname FROM students WHERE student_name in ('Anderson', 'Campbell')

然后,我期待这样的结果:

Joy
Prank

以上预期结果与 WHERE 条件下的序列匹配。 ( WHERE student_name in ('Anderson', 'Campbell') ) Joy 与 Anderson 匹配,Prank 与 Campbell 匹配。但是目前的结果是这样的:

Prank
Joy

现在,我不知道我应该怎么做才能达到预期的结果。对于这种情况,有人可以给我一些想法或信息吗?

最佳答案

您已经掉进了一个常见的 SQL 陷阱。 students 中的行和 ('Anderson', 'Campbell') 中的成员 没有内置顺序。服务器对 Anderson 排在 Campbell 之前一无所知,即使您的查询以这种方式显示它们也是如此。

您唯一的办法是使用适当的 ORDER BY 子句。如果没有 ORDER BY 子句,结果将以形式上不可预测的顺序显示。在您的情况下,查询末尾的 ORDER BY student_name 将使您的行排序可预测。

不可预测 是一个复杂的概念。这就像随机,但更糟。 随机 通常意味着每次结果都可能不同。 不可预测意味着每次都一样,直到不一样。

关于mysql - 使结果排序与给定的 WHERE IN(a,b,c) 条件匹配的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867490/

相关文章:

mysql - 主键作为外键

SQLite:UNION of n地方ORDER BY大小以及所有大写字母?

mysql - Hibernate:ORDER BY 子句中的 OR

php - 通过 SQL 从 PHP 生成 XML

mysql "Cannot add foreign key constraint"

sql-server - 如何管理数据库中的 ImportHistory?

Java:从数据库检索数据并加载到 JTable 中

SQL (MySQL) : Match first letter of any word in a string?

mysql - 在 MySQL 查询中重新定义/重新设置参数

mysql - 如何在 Mysql 中对 json_arrayagg() 返回的数组进行排序?