mysql - 添加 "on duplicate key update"子句以插入到查询中

标签 mysql sql

我从这样的查询开始:

insert into summary ( col1, col2, Total ) 
select col1, col2, count(col4) as total from importdata 
where col1 = 'abc' and col4 in ('1A', '2A') 
group by col1, col2
order by col1, col2

而且我还无法确定如何正确使用“重复”子句。我认为我需要的条款是

on duplicate key update total=count(col4)

我已将其放置在查询中的最后一行以及 where 子句之后的行,但是两者都生成了错误。我的条款正确吗?它需要去哪里?

(最坏的情况我可以使用“插入忽略”,但我认为更新会更好。)

最佳答案

您不能在 ON DUPLICATE KEY UPDATE 子句中使用 COUNT 或其他组函数。你可以这样做:

INSERT INTO summary ( col1, col2, Total ) 
    SELECT col1, col2, count(col4)
    FROM importdata 
    WHERE col1 = 'abc' AND col4 IN ('1A', '2A') 
    GROUP BY col1, col2
    ORDER BY col1, col2
ON DUPLICATE KEY UPDATE Total = VALUES(Total)

这意味着,如果存在重复键,只需将列 total 设置为您在 Total 中插入的值,而不是插入新行。请注意,我删除了 as Total ——这会导致问题,因为您已经有一个名为 Total 的列,并且名称不区分大小写。

关于mysql - 添加 "on duplicate key update"子句以插入到查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21819520/

相关文章:

sql - 如何从创建类型中查找纬度/经度

sql - 如何在 MySQL 中表示树及其内容?

mysql - 有效地返回 3 个表中的最低分组值

mysql - 移入 docker 容器 `docker-entrypoint-initdb.d` 的 sql 转储是否已加密?

python sqlalchemy 联合查询 ,'Query' 对象没有属性 'spends'

sql - 查询30000条SQL记录的方法

sql - 在 Rails/ActiveRecord 中命名 SQL 查询

php - codeigniter 3 连接表并获得一条记录

mysql - 使用 MYSQL 关联表和 JOIN

php - MySQL数据库IP地址来自rackspace还是google cloud?