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

时间:2017-05-09 10:35:22

标签: 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条件上的序列匹配。 (在('安德森'坎贝尔')中的学生名称)Joy与Anderson匹配,Prank与Campbell匹配。但目前的结果是这样的:

Prank
Joy

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

1 个答案:

答案 0 :(得分:2)

您已陷入常见的SQL陷阱。 students中的行和('Anderson', 'Campbell') 等集合的行没有内置顺序。服务器不知道任何内容即使您的查询以这种方式显示,Anderson之前的Campbell即将发布。

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

不可预测的是一个复杂的想法。它更像是随机随机通常意味着结果每次都可能不同。 不可预测意味着它每次都是相同的,直到它不是。