2011-08-08 10 views
7

Actualizo/inserto valores en una sola tabla con la función ON DUPLICATE KEY UPDATE. Hasta ahora todo está bien.ACTUALIZACIÓN DE LLAVE DUPLICADA con WHERE condición

INSERT INTO table1 SET field1=aa, field2=bb, field3=cc 
ON DUPLICATE KEY UPDATE SET field1=aa, field2=bb, field3=cc; 

Pero ahora me gustaría lograr que la actualización sólo se realiza si una condición (WHERE) es verdadera.

sintácticamente no es correcta:

INSERT INTO table1 SET field1=aa, field2=bb, field3=cc 
ON DUPLICATE KEY UPDATE SET field1=aa, field2=bb, field3=cc WHERE field4=zz; 

Alguna idea de cómo la afirmación correcta es SQL?

Muchas gracias.

Respuesta

9

Usando SI() debería funcionar, aunque no es agradable:

INSERT INTO table1 SET 
field1=aa, 
field2=bb, 
field3=cc 
ON DUPLICATE KEY UPDATE SET 
field1 = IF(field4 = zz, aa, field1), 
field2 = IF(field4 = zz, bb, field2), 
field3 = IF(field4 = zz, cc, field3) 

actualizar sólo los campos con los nuevos valores si se cumple la condición, de lo contrario mantener los antiguos.

Cuestiones relacionadas