MySQL - 一个声明中的多个更新?

时间:2011-05-25 12:29:29

标签: python mysql

我在MySQL中有一个表格如下:

studentID subjectID anotherID anotherID2AnotherID3studentScore

此表格中包含约100M条学生的记录。


假设我将以下信息存储在两个python列表中:

listStudentIDs = [1,112,33,5524,425653]

listNewScores = [12.76,73.2,83.893,92.3,53.6]

是否可以one query更新所有学生(其ID在studentScore)的所有listStudentIDs字段,当且仅当他们的分数在listNewScores时}是否大于当前存储在数据库中的分数(studentScore)?

3 个答案:

答案 0 :(得分:2)

在您的示例中,他们只有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;

答案 1 :(得分:1)

不幸的是,不,MySql无法处理这个问题。否则,我会一直使用它!

答案 2 :(得分:1)

尝试将两个列表放入临时表(studentID,studentScore)。

然后,您应该能够运行单个查询来相应地更新主表。

UPDATE studentTable t1 
JOIN tempTable t2 ON t1.studentID = t2.studentID 
SET t1.studentScore = t2.studentScore WHERE t2.studentScore > t1.studentScore