Também é possível usar
LEFT OUTER JOIN
por isso. Isto irá evitar sobrecarga de subconsulta (quando o sistema pode executar subconsulta uma vez para cada registro de consulta externa) como na resposta de John Woo, e evitará fazer trabalho desnecessário sobrescrevendo 800 registros já existentes, como no de user2340435:INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;
Isso primeiro selecionará todas as linhas de
A
e B
tabelas incluindo todas as colunas de ambas as tabelas, mas para linhas que existem em A
e não existem em B
todas as colunas para B
tabela será NULL
.Em seguida, ele filtra apenas essas últimas linhas (WHERE b.id IS NULL
), e finalmente insere todas essas linhas em B
tabela.