Mysql update нескольких строчек по условию

Иногда нужно обновить в таблице MySql n-ое количество строк. Причем вставить не одно значение, а несколько в зависимости от условия.

Запрос будет таким

UPDATE tbl_name  SET fld = CASE

WHEN pid=16 THEN ‘1’

WHEN pid=17 THEN ‘2’

WHEN pid=19 THEN ’54’

ELSE fld END;

Причем если не поставить в конце ELSE fld, то все не подходящие по условию значения будут обнулены.

Для вставки синтаксис проще

INSERT INTO mytable (id, title) VALUES ('1', 'val1'), ('2', 'val2');

6 комментариев на «“Mysql update нескольких строчек по условию”»

  1. Марк, здравствуйте!
    А можете подсказать как обновить у нескольких строк не одно поле, а, например, 2?

    я имею ввиду что-то типа этого:
    UPDATE tbl_name SET (a,b) = CASE
    WHEN id=1 THEN (555,666)
    ELSE (a,b) END;

  2. Марк, можете уже не отвечать, сам нашел решение:)
    Делюсь со всеми, во благо всех! 🙂

    UPDATE tbl_name SET fld1 = CASE pid
    WHEN 1 THEN ‘значение fld1 для pid1’
    WHEN 2 THEN ‘значение fld1 для pid2’
    END, fld2 = CASE pid
    WHEN 1 THEN ‘значение fld2 для pid1’
    WHEN 2 THEN ‘значение fld2 для pid2’
    END WHERE pid IN(1, 2);

  3. Спасибо, Сергей! Приму на вооружение.

    Только Марк еще маленький, 3 года только 🙂
    Пишет его папа Алексей

  4. Сергей, огромное спасибо за отличное решение! 🙂
    Но я бы, еще всё таки, добавил в ваш код ELSE, что бы другие поля не обнулялись:

    UPDATE tbl_name SET fld1 = CASE pid
    WHEN 1 THEN ‘значение fld1 для pid1?
    WHEN 2 THEN ‘значение fld1 для pid2?
    ELSE fld1
    END, fld2 = CASE pid
    WHEN 1 THEN ‘значение fld2 для pid1?
    WHEN 2 THEN ‘значение fld2 для pid2?
    ELSE fld2
    END WHERE pid IN(1, 2);

  5. Спасибо за это решение! Прямо в точку 🙂
    Обычно получается отыскать нужное решение прошерстив 5-6, а тут как раз решение моего вопроса — спасибо, буду Вас регулярно читать 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *