ACTUALIZAR varias filas con diferentes valores en una consulta en MySQL
Estoy tratando de entender cómo ACTUALIZAR varias filas con diferentes valores y simplemente no lo entiendo. La solución está en todas partes pero a mí me parece difícil de entender.
Por ejemplo, tres actualizaciones en 1 consulta:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '17389551';
Leí un ejemplo, pero realmente no entiendo como hacer la consulta. es decir:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
No tengo del todo claro cómo hacer la consulta si hay varias condiciones en la condición WHERE y IF... ¿Alguna idea?
Puedes hacerlo de esta manera:
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';
No entiendo tu formato de fecha. Las fechas deben almacenarse en la base de datos utilizando tipos de fecha y hora nativos.
MySQL permite una forma más legible de combinar múltiples actualizaciones en una sola consulta. Esto parece adaptarse mejor al escenario que usted describe, es mucho más fácil de leer y evita esas múltiples condiciones difíciles de desenredar.
INSERT INTO table_users (cod_user, date, user_rol, cod_office)
VALUES
('622057', '12082014', 'student', '17389551'),
('2913659', '12082014', 'assistant','17389551'),
('6160230', '12082014', 'admin', '17389551')
ON DUPLICATE KEY UPDATE
cod_user=VALUES(cod_user), date=VALUES(date)
Esto supone que la user_rol, cod_office
combinación es una clave principal. Si solo uno de estos es la clave principal , agregue el otro campo a la lista ACTUALIZAR. Si ninguno de ellos es una clave principal (eso parece poco probable), entonces este enfoque siempre creará nuevos registros, probablemente no lo que se desea.
Sin embargo, este enfoque hace que las declaraciones preparadas sean más fáciles de elaborar y más concisas.