Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL INSERT INTO / ON DUPLICATE KEY mit SELECT-Anweisungsproblem

Würde so etwas Einfaches funktionieren?

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

group by sollte sicherstellen, dass keine Duplikate vorhanden sind, sodass on duplicate key nicht erforderlich ist . Die Summe() + Unterabfrage, die Sie gemacht haben, sieht so aus, als ob Sie nur versucht hätten, zu zählen(*).

Der spezifische Fehler, den Sie erhalten haben, war auf size=sum(count) zurückzuführen. Bei einer Stapeleinfügung wäre dies richtigerweise size=values(size), siehe die Dokumentation auf values() .

BEARBEITEN:

Wenn für jede Stadt ein weiterer Eintrag hinzugefügt wird, gibt es keinen eindeutigen Index für die Stadt, und ein doppelter Schlüssel wird sowieso nichts bewirken.

Wenn Sie einen eindeutigen Index für (Stadt, Bundesland) hinzufügen, können Sie on duplicate key update size=values(size) hinzufügen auf die obige Abfrage und es wird jeden vorhandenen Datensatz aktualisieren.