Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL INSERT INTO / ON DUPLICATE KEY con problema dell'istruzione SELECT

Qualcosa di così semplice funzionerebbe?

insert into cities (city, state, size)
select city, state, count(*) as size from listings
group by city, state

group by dovrebbe assicurarsi che non ci siano duplicati in modo che non sia necessario on duplicate key . L'operazione sum() + subquery che stavi facendo sembra che stavi solo cercando di fare un conteggio(*).

L'errore specifico che stavi ricevendo era dovuto a size=sum(count). In un inserimento batch il modo corretto per farlo sarebbe size=values(size), vedere i documenti su values() .

MODIFICA:

Se sta aggiungendo un'altra voce per ogni città, allora non c'è un indice univoco sulla città e sulla chiave duplicata non farà nulla comunque.

se aggiungi un indice univoco su (città, stato), puoi aggiungere on duplicate key update size=values(size) alla query di cui sopra e aggiornerà ogni record esistente.