Copiar lo que no existe a otra tabla

Primero agardecerte por la respuesta anterior, y quisiera que me pudieras ayudar con esta otra. Tengo una tabla A y una tabla B y quisiera comparar A vs B y todo lo que no tenga en B pero si en A pase a B las tablas son iguales.

1 respuesta

Respuesta
1
Para poder hacer eso tienes que tener una clave única en ambas tablas. Puede ser de un campo o de varios.
Supongamos que la clave única está formada por los campos campo1, campo2 y campo3.
El SQL de la consulta que buscas sería:
INSERT into tablaB
SELECT a.* FROM tablaA AS a LEFT JOIN talbaB AS b ON
a.campo1=b.campo1 AND a.campo2=b.campo2 AND a.campo3=b.campo3
WHERE b.campo1 is null;
OJO: La estructura de las tablas A y B tiene que ser la misma para que no falle.
También puedes dar la vuelta a las tablas y cambiar tabla por tablaB (y sus respectivos alias 'a' y 'b') para insertar en A los registros de B que no tiene.
Si la estructura de las tablas fuera diferente, tendrías que indicar en el INSERT los nombres de campo a insertar y en la SELECT lo mismo. Sería algo así:
INSERT into tablaB(campo1,campo2,campo3,campo4,campo7)
SELECT a.campo1,a.campo2,a.campo3,a.campo4,a.campo7 FROM ....
Hola actualmente tengo así el query
SELECT a.*
FROM dublin1 AS a LEFT JOIN dublin AS b ON a.Min_Lin=b.Min_Lin AND
 a.RM_RT= b.RM_RT AND 
a.Policy= b.Policy AND
 a.Cert_No= b.Cert_No AND
a.Policy_Holder=b.Policy_Holder AND 
a.Subm_Number= b.Subm_Number AND 
a.Incep_Date=b.Incep_Date AND
 a.Expiry_Date=b.Expiry_Date AND
a.Premium= b.Premium AND
 a.Curr= b.Curr AND
 a.Inst_Per=b.Inst_Per AND
 a.Maj_ Prod = b.Prod AND
 a.Producer = b.Producer AND
 a.Prod_Comm_Perc = b.Prod_Comm_Perc AND
 a.Lead_Follow =b.Lead_Follow AND
 a.Tr=b.Tr AND
 a.Mgr_Cd=b.Mgr_Cd AND
 a.Booking_Date  =  b.Booking_Date AND
 a.Acct_Period_Date  =  b.Acct_Period_Date AND
 a.userid_cd  =  b.userid_cd
WHERE b.Maj_Lin Is Null AND b.Min_Lin Is Null AND b.RM_RT Is Null AND b.RM_RT Is Null AND b.Policy Is Null AND b.Cert_No Is Null AND b.Policy_Holder Is Null AND b.Subm_Number Is Null AND b.Incep_Date Is Null AND b.Expiry_Date Is Null AND a.Premium Is Null AND b.Curr Is Null AND b.Inst_Per Is Null AND b.Prod Is Null AND b.Producer Is Null AND b.Prod_Comm_Perc Is Null AND b.Lead_Follow Is Null AND b.Tr Is Null AND b.Mgr_Cd Is Null AND b.Booking_Date Is Null AND b.Acct_Period_Date Is Null AND b.userid_cd Is Null AND b.Product_cd Is Null AND b.Product_Desc Is Null AND b.IPS_Amt Is Null AND b.CCS_Amt Is Null AND b.Fire_Brigade_Tax Is Null AND b.Consorcio_Amt Is Null AND b.SOA_Amt Is Null AND b.Total_Premium Is Null AND a.Treaty_FAC_RI_Used Is Null;
Como podrás ver es algo largo por que no tengo un campo ID para poder utilizar esto debido a que cualquier campo puede ser igual. El problema es que al ejecutarlo en access me dice "Error de sintaxis (falta operador) en la expresión Consulta". :s
Tienes puesto "Maj_ Prod" con un espacio entre medias y en la parte de la tabla 'b' pones sólo 'Prod'. Pon correctamente la línea:
      a.Maj_Prod = b.Maj_Prod AND
Y con eso parece que funciona la unión de las tablas.
Otro problema que tiene es que en la WHERE pones que los campos 'a.Premium' y 'a.Treaty_FAC_RI_Used'. Supongo que querrás poner 'b.'.
No veo nada más. Ya me contarás si te funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas