soporta - MySQL-ACTUALIZA mĂșltiples filas con diferentes valores en una consulta
seleccionar el valor mas alto mysql (4)
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 = ''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'';
read un ejemplo, pero realmente no entiendo cómo hacer la consulta. es decir:
UPDATE table_to_update
SET cod_user= IF(cod_office = ''123456'',''622057'',''2913659'',''6160230'')
,date = IF(cod_office = ''123456'',''12082014'')
WHERE ?? IN (??) ;
No estoy del todo claro cómo hacer la consulta si hay varias condiciones en WHERE y en la condición IF ... ¿alguna idea?
MySQL permite una forma más legible de combinar múltiples actualizaciones en una sola consulta. Esto parece ajustarse mejor al escenario que describes, es mucho más fácil de leer y evita esas condiciones múltiples difíciles de desentrañar.
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)
Esto supone que la combinación user_rol, cod_office
es una clave principal. Si solo uno de estos es el PK, agregue el otro campo a la lista de ACTUALIZACIÓN. Si ninguno de ellos es una clave primaria (que parece poco probable), 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 construir y más concisas.
Puede usar una instrucción CASE
para manejar escenarios múltiples si / entonces:
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'';
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 usando tipos nativos de fecha y hora.
update table_name
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'';