Ver Mensaje Individual
  #9 (permalink)  
Antiguo 11/02/2017, 21:31
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Copiar de una tabla a otra sin duplicar registros

Si necesitas insertar en la tabla A los registros cuyos datos están en la B, pero sin que se repitan, en MySQL NO puedes hacerlo en UN solo paso.
Necesitas dos queries, por la simple razón de que para poder descartar aquellos que ya existen, el SELECT tiene que hacer un JOIN sobre la tabla A, y MySQL no admite leer y escribir la misma tabla en una misma sentencia.
Tienes tres caminos:
1) Si la tabla destino tiene PK definida, y sólo vas a validar por PK, puedes hacer un simple y directo INSERT IGNORE...
2) Si vas a validar sobre campos que no sean PK o clave UNIQUE, puedes usar una tabla temporal para obtener los que van a ser insertados, e insertarlos desde esa tabla temporal.
3) Meter esa misma lógica en un stored procedure y usar tablas TEMPORARY, que son transitorias y se pueden crear on the fly, y desaparecen solas.

Nota: Otros DBMS, como Oracle, por ejemplo, si permiten insercion y lectura al mismo tiempo. Pero NO MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)