问题描述
|
我在
MysqL
中有一张桌子,看起来像这样:
studentID
2anotherID
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