Иногда нужно обновить в таблице 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');
Спасибо, я как раз искал такой вид обновления. думал придется по одному запросу на каждую запись делать. Просто супер!
Комментарий by cyrax1000 — 12.03.2010 @ 17:27
Марк, здравствуйте!
А можете подсказать как обновить у нескольких строк не одно поле, а, например, 2?
я имею ввиду что-то типа этого:
UPDATE tbl_name SET (a,b) = CASE
WHEN id=1 THEN (555,666)
ELSE (a,b) END;
Комментарий by Сергей — 12.03.2010 @ 21:38
Марк, можете уже не отвечать, сам нашел решение:)
Делюсь со всеми, во благо всех! 🙂
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
Спасибо, Сергей! Приму на вооружение.
Только Марк еще маленький, 3 года только 🙂
Пишет его папа Алексей
Комментарий by admin — 15.03.2010 @ 16:05
Сергей, огромное спасибо за отличное решение! 🙂
Но я бы, еще всё таки, добавил в ваш код 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
Спасибо за это решение! Прямо в точку 🙂
Обычно получается отыскать нужное решение прошерстив 5-6, а тут как раз решение моего вопроса — спасибо, буду Вас регулярно читать 🙂
Комментарий by Данил — 02.03.2011 @ 19:45