Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Copiar de una tabla a otra sin duplicar registros

Estas en el tema de Copiar de una tabla a otra sin duplicar registros en el foro de Mysql en Foros del Web. Hola Tengo tabla a y tabla b, ambas con un campo id Quiero copiar todos los registros de la tabla b en la tabla a ...
  #1 (permalink)  
Antiguo 10/02/2017, 12:15
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Copiar de una tabla a otra sin duplicar registros

Hola

Tengo tabla a y tabla b, ambas con un campo id

Quiero copiar todos los registros de la tabla b en la tabla a

Pero sin crear duplicados, que copie solo los registros que no esten en la tabla a

No encuentro como hacerlo, a eso hay que sumarle mi escaso conocimiento de mysql

Gracias por vuestra ayuda
__________________
Electricistas 24 Horas
  #2 (permalink)  
Antiguo 10/02/2017, 12:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Copiar de una tabla a otra sin duplicar registros

Código MySQL:
Ver original
  1. select * from tabla_b as t1
  2. left join tabla_a as t2 on (t1.id=t2.id)


Asi sacas los registros que no estan en tabla A
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 10/02/2017, 12:55
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Copiar de una tabla a otra sin duplicar registros

Cita:
Iniciado por Libras Ver Mensaje
Código MySQL:
Ver original
  1. select * from tabla_b as t1
  2. left join tabla_a as t2 on (t1.id=t2.id)


Asi sacas los registros que no estan en tabla A
Perdona, pero no entiendo lo de t1 y t2

Son tablas con muchas columnas, ambas tablas identicas, pero quiero regirme para no crear duplicados los datos de la columna ID
__________________
Electricistas 24 Horas
  #4 (permalink)  
Antiguo 10/02/2017, 13:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Copiar de una tabla a otra sin duplicar registros

Cita:
Iniciado por williamhpf Ver Mensaje
Perdona, pero no entiendo lo de t1 y t2

Son tablas con muchas columnas, ambas tablas identicas, pero quiero regirme para no crear duplicados los datos de la columna ID
Y que tiene que tengan muchas columnas? ahi estoy comparando por el campo ID que es el que no quieres que este duplicado, ese query te regresa los registros que no estan en la tabla A y que estan en tabla B, el t1 y t2 es un alias para la consulta, que es un alias, es un nombre para la tabla el cual sera usado en la consulta, en este caso para no escribir tabla_a.id mejor uso t1.id

se entiende?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/02/2017, 13:35
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Copiar de una tabla a otra sin duplicar registros

Cita:
Iniciado por williamhpf Ver Mensaje
Perdona, pero no entiendo lo de t1 y t2

Son tablas con muchas columnas, ambas tablas identicas, pero quiero regirme para no crear duplicados los datos de la columna ID
Se entiende pero no me deja seleccionarlos para eliminarlos grrrr

La selección actual no contiene una columna única. La edición de la grilla y los enlaces de copiado, eliminación y edición no están disponibles.
__________________
Electricistas 24 Horas
  #6 (permalink)  
Antiguo 10/02/2017, 13:51
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Copiar de una tabla a otra sin duplicar registros

Para eliminarlos deberias de hacerlo con un delete, tu pedias un query para copiar los repetidos y fue el que te di, mysql no es access que te deje eliminar los registros desde el grid........

Ahora que es lo que quieres eliminar?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 10/02/2017, 13:57
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Copiar de una tabla a otra sin duplicar registros

Cita:
Iniciado por Libras Ver Mensaje
Para eliminarlos deberias de hacerlo con un delete, tu pedias un query para copiar los repetidos y fue el que te di, mysql no es access que te deje eliminar los registros desde el grid........

Ahora que es lo que quieres eliminar?
Con tu codigo me muestra los registros de la tabla_b que ya tengo en la tabla_a, esos quisiera borrarlos y luego puedo pasar los restantes a la tabla_a

Por cierto muy agradecido por tu tiempo...
__________________
Electricistas 24 Horas
  #8 (permalink)  
Antiguo 11/02/2017, 10:13
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Copiar de una tabla a otra sin duplicar registros

Podrian echarme un cable en este ultimo paso?

Gracias
__________________
Electricistas 24 Horas
  #9 (permalink)  
Antiguo 11/02/2017, 21:31
Avatar de 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, 4 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)
  #10 (permalink)  
Antiguo 13/02/2017, 03:08
Avatar de williamhpf  
Fecha de Ingreso: mayo-2009
Mensajes: 144
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Copiar de una tabla a otra sin duplicar registros

Lo solucione utilizando replace gracias a todos.
__________________
Electricistas 24 Horas
  #11 (permalink)  
Antiguo 13/02/2017, 06:51
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Copiar de una tabla a otra sin duplicar registros

!Cuidado!
El funcionamiento del REPLACE es peligroso, porque si bien va a crear registros nuevos para los que no existen, va a sobreescribir todos los valores de los registros que ya existan. Tienes que estar COMPLETAMENTE seguro de que los datos entrantes estén completos y no posean valores que no sean los reales.
Esencialmente, si uno de esos registros tuviese un campo numerico en cero, simplemente porque no se hizo una actualizacion de ese dato, el REPLACE pondrá en CERO ese campo de ese registro en la tabla destino, sin hacer verificaciones. Y si no quieres que se modifique ese dato en la tabla destino... pues no puedes usar replace.

¿Se entiende bien?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: duplicar, registro, registros, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:56.