Обновление нескольких строк с разными значениями - PullRequest
7 голосов
/ 07 октября 2010

Я получил эту таблицу в моей базе данных MySQL, 'users'.У него есть поля 'id' и 'value'.

Теперь я хочу обновить лотов строк в этой таблице с помощью одного SQL-запроса, но многиестроки должны получить другое значение.В настоящее время я использую это:

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)

Это работает.Но я чувствую, что могу провести некоторую оптимизацию, поскольку я присваиваю только 3 или 4 разных значения.Как видите, сейчас это 47, 53 и 65. Есть ли способ, которым я могу обновить все строки, которые получают одно и то же значение одновременно в рамках одного и того же запроса?Или есть другой способ оптимизировать это?

Ответы [ 3 ]

12 голосов
/ 07 октября 2010

Вместо того чтобы делать case variable when value then ..., попробуйте сделать case when condition then ... - вот так:

UPDATE users
    SET value = CASE 
        WHEN id in (1,4) THEN 53
        WHEN id = 2 THEN 65
        WHEN id in (3,5) THEN 47
    END
WHERE id IN (1,2,3,4,5)
8 голосов
/ 13 января 2016

Предполагается, что идентификатор является уникальным или основным ...

insert into users 
  (id,value) 
VALUES 
  (1,53),(2,65),(3,47),(4,53),(5,47)
on duplicate key update
value=VALUES(value)
2 голосов
/ 07 октября 2010

Я бы просто сделал это с помощью нескольких различных операторов UPDATE.

UPDATE users
    SET value = 53
WHERE id = 1;


UPDATE users
    SET value = 65
WHERE id = 2;

...

Это кажется самым простым, если у вас есть только 5 или 6 значений для установки в нескольких строках. Или есть какая-то конкретная причина, по которой вам нужно сделать это в одном запросе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...