带有 SELECT 语句问题的 MySQL INSERT INTO/ON DUPLICATE KEY

标签 mysql sql insert mysql-error-1111

你好 - 我是 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/

相关文章:

MySQL:获取约束名称并将其放入一条语句中

java - 非常快地将多行插入 Oracle 数据库

SQL Server存储过程插入多个表

node.js - ArangoDB 插入速度极慢

php - SQL - 使用连接表进行 SUM 和 AVG 查询时遇到问题

mysql - 如何在 mysql 上动态创建临时表,它对性能有帮助吗?

php - 如何连接两个表形成一个SQL查询?

php - 使用 php mysql ajax 进行实时搜索

sql - 使用 SQL Server 检索引用树

mysql - 插入带有扭曲问题的选择