MySQL —一条语句中有多个更新?

问题描述

| 我在
MysqL
中有一张桌子,看起来像这样:
studentID
2
anotherID
4ѭ,
AnotherID3
studentscore
该表中有大约
100M
个学生记录。 假设我将以下信息存储在两个“ 8”列表中:
listStudentIDs
= [1,123,33,5524,425653]
listNewscores
= [12.76,73.2,83.893,92.3,53.6] 仅当其在
listNewscores
中的分数大于当前在数据库中存储的分数(
studentscore
)时,才可能有
one query
来更新所有学生(其ID在
listStudentIDs
中)的所有
studentscore
字段?     

解决方法

在您的示例中,他们是5个学生ID,仅需更新4个分数。 如果您要更新的学生名单不多,则可以在一个查询中进行如下更新:
UPDATE t_student
SET studentScore = CASE
 WHEN studentID=1    THEN 12.76
 WHEN studentID=123  THEN 73.2
 WHEN studentID=33   THEN 83.893
 WHEN studentID=5524 THEN 92.3
 ELSE studentScore END
WHERE studentID IN (1,123,33,5524,425653)
不过,您可能会减少考虑使用包含多个查询的SQL语句:
UPDATE t_student SET studentScore = 12.76  WHERE studentID = 1;
UPDATE t_student SET studentScore = 73.2   WHERE studentID = 123;
UPDATE t_student SET studentScore = 83.893 WHERE studentID = 33;
UPDATE t_student SET studentScore = 92.3   WHERE studentID = 5524;
    ,不幸的是,不,MySql无法处理此问题。否则,我会一直使用它!     ,尝试将两个列表放入临时表(studentID,studentScore)。 然后,您应该能够运行一个查询来相应地更新主表。
UPDATE studentTable t1 
JOIN tempTable t2 ON t1.studentID = t2.studentID 
SET t1.studentScore = t2.studentScore WHERE t2.studentScore > t1.studentScore