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 комментариев »

  1. Спасибо, я как раз искал такой вид обновления. думал придется по одному запросу на каждую запись делать. Просто супер!

    Комментарий by cyrax1000 — 12.03.2010 @ 17:27

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

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

    Комментарий by Сергей — 12.03.2010 @ 21:38

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

    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);

    Комментарий by Сергей — 13.03.2010 @ 11:06

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

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

    Комментарий by admin — 15.03.2010 @ 16:05

  5. Сергей, огромное спасибо за отличное решение! 🙂
    Но я бы, еще всё таки, добавил в ваш код 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);

    Комментарий by john — 31.01.2011 @ 4:06

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

    Комментарий by Данил — 02.03.2011 @ 19:45

RSS feed for comments on this post. TrackBack URL

Leave a comment






MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика