使结果排序与给定的 WHERE IN(a,b,c) 条件匹配的查询
query to make result ordering match a given WHERE IN(a,b,c) condition
我正在使用 MySQL 数据库做一些工作来填写文档。我想要做的是根据给定的 WHERE 条件生成结果。关注学生 table:
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
将使您的行排序可预测。
不可预测是一个复杂的想法。就像 random 除了更糟。 Random 通常意味着每次结果很可能不同。 不可预测意味着每次都一样,直到不一样。
我正在使用 MySQL 数据库做一些工作来填写文档。我想要做的是根据给定的 WHERE 条件生成结果。关注学生 table:
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
将使您的行排序可预测。
不可预测是一个复杂的想法。就像 random 除了更糟。 Random 通常意味着每次结果很可能不同。 不可预测意味着每次都一样,直到不一样。