MySQL-обновление нескольких строк с разными значениями в одном запросе
Я пытаюсь понять, как обновить несколько строк с разными значениями, и я просто не понимаю. Решение есть везде, но мне кажется, что это трудно понять.
например, три обновления в 1 запрос:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '123456';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '123456';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '123456';
Я читать пример, но я действительно не понимаю, как сделать запрос. я.е:
UPDATE table_to_update
SET cod_user= IF(cod_office = '123456','622057','2913659','6160230')
,date = IF(cod_office = '123456','12082014')
WHERE ?? IN (??) ;
Я не совсем ясно, как сделать запрос, если есть несколько условий в WHERE и в IF состояние..есть идеи?
4 ответа:
вы можете сделать это так:
UPDATE table_users SET cod_user = (case when user_role = 'student' then '622057' when user_role = 'assistant' then '2913659' when user_role = 'admin' then '6160230' end), date = '12082014' WHERE user_role in ('student', 'assistant', 'admin') AND cod_office = '17389551';
Я не понимаю ваш формат даты. Даты должны храниться в базе данных с использованием собственных типов даты и времени.
MySQL позволяет более читаемый способ объединить несколько обновлений в один запрос. Это, по-видимому, лучше соответствует описанному вами сценарию, гораздо легче читается и позволяет избежать этих трудных для распутывания нескольких условий.
INSERT INTO table_users (cod_user, date, user_rol, cod_office) VALUES ('622057', '12082014', 'student', '123456'), ('2913659', '12082014', 'assistant','123456'), ('6160230', '12082014', 'admin', '123456') ON DUPLICATE KEY UPDATE cod_user=VALUES(cod_user), date=VALUES(date)
это предполагает, что
user_rol, cod_office
комбинация является первичным ключом. Если только один из них является PK, то добавьте другое поле в список обновлений. Если ни один из них не является первичным ключом (что кажется маловероятным), то такой подход всегда будет создавать новые записи-наверное, не то, что нужно.тем не менее, этот подход делает подготовленные заявления легче строить и более кратким.
можно использовать
CASE
оператор для обработки нескольких сценариев if / then:UPDATE table_to_update SET cod_user= CASE WHEN user_rol = 'student' THEN '622057' WHEN user_rol = 'assistant' THEN '2913659' WHEN user_rol = 'admin' THEN '6160230' END ,date = '12082014' WHERE user_rol IN ('student','assistant','admin') AND cod_office = '17389551';