2009-05-15 23 views
7

Si tengo una consulta como esta, ¿cómo puedo hacer referencia a los valores que ya he dado en la declaración de actualización, para que no tenga que insertar los mismos datos para consultar de nuevo? Ejemplo Me gustaría actualizar el valor de col1 con 'xxx', pero ahora necesito ingresar 'xxx' nuevamente en una declaración duplicada. ¿Hay alguna forma de referir esos valores en una declaración duplicada?MySQL en actualización de clave duplicada

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = ‘zzz’ 
+0

acabo de dejar esto aquí, muy buena solución: http://stackoverflow.com/a/450695/1101589 – Ekonoval

Respuesta

33

Esto debería funcionar y es un poco más elegante:

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = VALUES(col1) 

Tenga en cuenta que no es necesario actualizar la pieza clave principal de la fila. Sabemos que es lo mismo porque hubo una colisión.

+0

que los valores de palabras clave en la última línea es crucial! – physicalattraction

3

En PHP hago esto para resolver el problema:

$fields = "a = 1, b = 2, c = 3"; 
$sql = "INSERT INTO some_table SET id = $id, $fields ON DUPLICATE KEY UPDATE $fields"; 
mysql_query($sql); 
Cuestiones relacionadas