2010-09-11 6 views
8

Tengo dos comandos INSERT, que me resultan inútiles porque los dos conjuntos de filas, los que ya están en la tabla y los que tengo como comandos INSERT, no están desconectados. Ambos comandos insertan muchas filas y muchos valores.Convirtiendo comandos INSERT para ACTUALIZAR

Por lo tanto, obtengo el error de entrada duplicada si quiero ejecutar esas líneas.

¿Hay alguna manera fácil de 'convertir' esos comandos en UPDATE?

Sé que esto suena estúpido, porque ¿por qué hago INSERT comandos, si quiero UPDATE. Sólo para que sea un escenario claro: otro desarrollador me dio el guión :)

Gracias de antemano, Daniel

EDITAR - problema resuelto

Primero creé una mesa y lo llenó con INSERT mis órdenes, entonces yo usamos el siguiente comando REPLACE:

REPLACE 
    INTO table_1 
SELECT * 
    FROM table_2; 

Este principio se puede encontrar en: How can I merge two MySQL tables?

+2

Qué SQL? Algunas variantes (MSSQL, por ejemplo) son compatibles con la sentencia MERGE que definitivamente estaría en tu calle. Por favor actualice sus etiquetas. – spender

+0

Gracias por su aviso. Estamos hablando de consultas MySQL. –

Respuesta

13

La palabra clave REPLACE de MySQL hace esto. Simplemente reemplace la palabra clave INSERT en sus consultas con la palabra REPLACE y debería actualizar las filas en lugar de insertar nuevas. Tenga en cuenta que solo funcionará si está insertando una clave principal o una columna de clave única.

+1

¡Gracias! Haré una edición para explicar detalladamente mi solución. –

+1

Esto puede causar problemas. El uso de reemplazar eliminará la fila con la clave duplicada y escribirá toda la nueva fila. Esto puede arruinar tus índices y agregar sobrecarga. Es más apropiado usar 'en duplicado ... actualización' que retendrá sus índices. Reemplazar se usa mejor en escenarios de una vez donde se indend para reindexar, en lugar de consultas repetidas para actualizar una tabla. –

0

Tendría que volver a escribirlas en las actualizaciones a mano. Si encuentro un problema así, primero busco el conteo de cierta clave primaria, si no se encuentra ninguna, inserto un conjunto de datos genérico y lo actualizo posteriormente. De esta forma, se pueden agregar nuevos datos y los datos ya existentes se actualizarán, y no es necesario diferenciar entre insertar datos nuevos y actualizar datos.

0

Usted puede modificar fácilmente sus consultas para actualizar las filas duplicadas, consulte INSERT ... ON DUPLICATE KEY sintaxis en MySQL

+0

Estaba pensando en la solución ON DUPLICATE KEY, pero no veo cómo sería fácil. –

Cuestiones relacionadas