开发者

MySQL -- Multiple Updates In One Statement?

开发者 https://www.devze.com 2023-03-08 12:08 出处:网络
I have a table in MySQL that looks like this: studentID subjectIDanotherIDanotherID2, AnotherID3, studentScore

I have a table in MySQL that looks like this:

studentID subjectID anotherID anotherID2, AnotherID3, studentScore

This table has about 100M records of students in it.


Suppose that I have the following information stored in two python lists:

listStudentIDs = [开发者_JS百科1, 123, 33, 5524, 425653]

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

Is it possible to have one query that will update all studentScore fields for all students (whose IDs are in listStudentIDs) if, and only if, their score in listNewScores is greater than their score currently stored in the database ( studentScore )?


In your example, they are 5 student ids for only 4 scores to update.

If your list of students to update is not to long, then you can have an update in one query like this :

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)

Nevertheless less you may consider to use a SQL statement including several queries :

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;


Unfortunately, no, MySql can't handle this. Otherwise, I'd be using it all the time!


Try putting your two lists into a temporary table (studentID, studentScore).

Then you should be able to run a single query to update the main table accordingly.

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

精彩评论

暂无评论...
验证码 换一张
取 消