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 para mí 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';
Yo leí un ejemplo, pero realmente no entiendo cómo 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 el DÓNDE y en la condición SI ... ¿alguna idea?
mysql
sql
sql-update
franvergara66
fuente
fuente
Respuestas:
Puedes hacerlo de esta manera:
No entiendo tu formato de fecha. Las fechas deben almacenarse en la base de datos utilizando tipos de fecha y hora nativos.
fuente
update
s solo afecta a los registros que ya existen.cod_user
es una clave principal y los valores se están barajando, entonces la mejor ruta es probablemente varias actualizaciones.MySQL permite una forma más legible de combinar múltiples actualizaciones en una sola consulta. Esto parece ajustarse mejor al escenario que describe, es mucho más fácil de leer y evita esas múltiples condiciones difíciles de desenredar.
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 (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.
fuente
cod_user=VALUES(cod_user), ...
, incluso de documentos oficiales de MySQL 5.6Puede usar una
CASE
declaración para manejar múltiples escenarios if / then:fuente
fuente
Para ampliar la respuesta de @Trevedhek ,
En caso de que la actualización se haga con claves no únicas, se necesitarán 4 consultas
NOTA: Esto no es seguro para transacciones
Esto se puede hacer usando una tabla temporal.
Paso 1: cree una clave de tabla temporal y las columnas que desea actualizar
Paso 2: inserte los valores en la tabla temporal
Paso 3: actualice la tabla original
Paso 4: suelte la tabla temporal
fuente
Aquí col4 y col1 están en la Tabla1. col2 y col3 están en la Tabla2
Estoy tratando de actualizar cada col1 donde col4 = col3 valor diferente para cada fila
fuente
Lo hice de esta manera:
donde está PushSettings
funciona bien
fuente