También es posible usar LEFT OUTER JOIN
para eso. Esto evitará la sobrecarga de subconsultas (cuando el sistema puede ejecutar subconsultas una vez para cada registro de consulta externa) como en la respuesta de John Woo, y evitará hacer un trabajo innecesario sobrescribiendo 800 registros ya existentes como en el usuario 2340435:
INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;
Esto primero seleccionará todas las filas de A
y B
tablas que incluyen todas las columnas de ambas tablas, pero para las filas que existen en A
y no existen en B
todas las columnas para B
la tabla será NULL
.Luego filtra solo las últimas filas (WHERE b.id IS NULL
), y finalmente inserta todas estas filas en B
mesa.