Updating multiple rows with different values

10,366

Solution 1

Assuming id is unique or primary...

insert into users 
  (id,value) 
VALUES 
  (1,53),(2,65),(3,47),(4,53),(5,47)
on duplicate key update
value=VALUES(value)

Solution 2

I would just do this with a few different UPDATE statements.

UPDATE users
    SET value = 53
WHERE id = 1;


UPDATE users
    SET value = 65
WHERE id = 2;

...

This seems simplest if you only have 5 or 6 values to set on multiple rows each. Or is there some specific reason that you need to do this in one query?

Share:
10,366
Rits
Author by

Rits

22 year old Dutch iPhone app developer with interest in Ruby on Rails.

Updated on July 27, 2022

Comments

  • Rits
    Rits almost 2 years

    I got this table in my MySQL database, 'users'. It has the fields 'id' and 'value'.

    Now, I want to update lots of rows in this table with a single SQL query, but many rows should get a different value. Currently, I'm using this:

    UPDATE users
        SET value = CASE id
            WHEN 1 THEN 53
            WHEN 2 THEN 65
            WHEN 3 THEN 47
            WHEN 4 THEN 53
            WHEN 5 THEN 47
        END
    WHERE id IN (1,2,3,4,5)
    

    This works. But I feel I could do some optimization since there are only about 3 or 4 different values I'm assigning to the rows. As you can see, right now these are 47, 53 and 65. Is there a way I can update all rows that get the same value simultaneously within the same query? Or, is there another way I can optimize this?

  • Matmarbon
    Matmarbon almost 8 years
    I don't know why this got so few votes. It's perfect!