添加“on duplicate key update”子句以插入查询

时间:2014-02-17 02:00:41

标签: 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子句之后的行,但都产生了错误。我的条款是否正确,它需要去哪里?

(最坏的情况我可以使用'insert ignore',但我认为更新会更好。)

2 个答案:

答案 0 :(得分:0)

您不能在COUNT子句中使用ON DUPLICATE KEY UPDATE或其他组功能。你可以做的是:

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的列,并且名称不区分大小写。

答案 1 :(得分:0)

您不能使用函数进行重复键更新,但是,您可以创建变量然后使用该变量。

INSERT INTO summary (col1, col2, Total)
   select col1, col2,  @totalCount := 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 = @totalCount;