MySQL INSERT INTO / ON DUPLICATE KEY与SELECT语句问题

时间:2009-11-11 00:34:27

标签: mysql sql insert mysql-error-1111

你好 - 我是一个MySQL Noob。我有一张各种商业列表的表格,我正在尝试填充第二个名为“城市”的表格,其中包含唯一的城市名称以及每个城市的列表数量。我能够做一个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); 

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

这样的工作会简单吗?

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()上的文档。

编辑:

如果它为每个城市添加了另一个条目,那么城市上没有唯一的索引,并且重复的密钥无论如何都不会做任何事情。

如果您在(城市,州)上添加唯一索引,则可以将on duplicate key update size=values(size)添加到上述查询中,它将更新每个记录。

答案 1 :(得分:0)

尝试这一点,虽然我希望在释放它之前我有一些东西要测试它。

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