MySQL – Insira coisas de uma tabela para outra se a entrada não existir

Pode ser alguma coisa básica do MySQL, mas é como tudo – se você não estiver fazendo algo regularmente, algumas peças artesanais enferrujam.

Recentemente, tive que migrar partes de dados de uma tabela para outra enquanto mudava um pouco o design do banco de dados. Preciso disso como parte de uma tarefa Rake e é muito útil fazer isso com SQL puro.

Eu tenho duas mesas:

  • redes
  • network_charges

que cria uma pertence à associação. Os dados que preciso migrar para as cobranças de rede existem parcialmente nas redes, mas os itens networksatuam como herança única, então talvez eu tenha vários WHEREs.

Esta solução de copiar dados de uma tabela para a outra se um registro ainda não foi copiado funciona para mim:

INSERT INTO network_charges (power_network_id, ap, gp, measuring_and_billing)
SELECT network_id
,
ap
,
gp
,
measuring_and_billing

FROM networks

WHERE type
='PowerNetwork'
AND network_id NOT IN
(
SELECT power_network_id

FROM network_charges

)

Pode haver soluções melhores, mas acho que usar o operador AND para obter as exclusões pode ser usado.