我在MySQL
中有一个表格如下:
studentID
subjectID
anotherID
anotherID2
,AnotherID3
,studentScore
此表格中包含约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
)?
答案 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