你好 - 我是 MySQL 菜鸟。我有一张包含各种商业列表的表格,我正在尝试填充第二张名为 cities 的表格,该表格包含唯一的城市名称以及每个城市的列表数量。我能够执行一个 SELECT 语句来获取这些数据,如下所示:
SELECT city,state,sum(count)
FROM (
SELECT city,state, 1 AS count FROM listings
) results
GROUP BY city
ORDER BY sum(count) DESC,city;
但是,现在我想更新表格,但我似乎无法找到正确的语句来工作。这是我拥有的最新版本,但我目前收到“无效使用组功能”错误。
INSERT INTO cities(city,state,size)
SELECT city,state,sum(count)
FROM (
SELECT city,state, 1 AS count FROM listings
) results
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), size=sum(count);
感谢任何帮助!
最佳答案
像这样简单的东西行得通吗?
insert into cities (city, state, size)
select city, state, count(*) as size from listings
group by city, state
group by
应确保没有重复项,因此不需要 on duplicate key
。您正在做的 sum() + 子查询看起来就像您只是想做一个计数 (*)。
您遇到的特定错误是因为 size=sum(count)。在批量插入中,执行此操作的正确方法是 size=values(size),请参阅 values()
上的文档.
编辑:
如果它为每个城市添加另一个条目,那么在城市上没有唯一索引,并且在重复键上无论如何也不会做任何事情。
如果您在 (city, state) 上添加一个唯一索引,那么您可以将 on duplicate key update size=values(size)
添加到上述查询中,它将更新每条记录。
关于带有 SELECT 语句问题的 MySQL INSERT INTO/ON DUPLICATE KEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712240/