我正在做一些工作来使用 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/