Será que algo tão simples como isso funcionaria?
insert into cities (city, state, size)
select city, state, count(*) as size from listings
group by city, state
group by
deve garantir que não haja duplicatas para que não haja necessidade de on duplicate key
. A coisa de sum() + subconsulta que você estava fazendo parece que você estava apenas tentando fazer uma contagem(*). O erro específico que você estava recebendo era por causa do tamanho =soma (contagem). Em uma inserção em lote, a maneira correta de fazer isso seria size=values(size), consulte os documentos em
values()
. EDITAR:
Se estiver adicionando outra entrada para cada cidade, não haverá um índice exclusivo na cidade e na chave duplicada não fará nada de qualquer maneira.
se você adicionar um índice exclusivo em (cidade, estado), poderá adicionar
on duplicate key update size=values(size)
para a consulta acima e atualizará cada registro no local.