MySQL INSERT INTO / ON DUPLICATE KEY with SELECT statement issue

♀尐吖头ヾ 提交于 2019-12-02 03:48:24

Would something as simple as this work?

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

group by should ensure that there are no duplicates so that there is no need for on duplicate key. The sum() + subquery thing you were doing looks like you were just trying to do a count(*).

The specific error you were getting was because of the size=sum(count). In a batch insert the correct way to do this would be size=values(size), see the docs on values().

EDIT:

If it's adding another entry for each city then there isn't a unique index on city and on duplicate key won't do anything anyway.

if you add a unique index on (city, state) then you can add on duplicate key update size=values(size) to the above query and it will update each record in place.

Try this, though I wish I had something to test it on before unleashing it on you.

insert into cities (city, state, size)
select city, state, count(*) AS size
from listings
group by city, state
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!