Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 加上「;“关于重复密钥更新”;要插入到查询中的子句_Mysql_Sql - Fatal编程技术网

Mysql 加上「;“关于重复密钥更新”;要插入到查询中的子句

Mysql 加上「;“关于重复密钥更新”;要插入到查询中的子句,mysql,sql,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 replicate”子句是如何定义的。我想我需要的条款是 on duplica

我从这样一个查询开始:

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 replicate”子句是如何定义的。我想我需要的条款是

on duplicate key update total=count(col4)
我把它放在查询的最后一行和where子句之后,但都产生了错误。我的条款是否正确?它应该放在哪里


(最坏的情况下,我可以使用“insert ignore”,但我认为进行更新会更好。)

您不能在
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
中插入的值,而不是插入新行。请注意,我将
改为total
——这会导致问题,因为您已经有一个名为
total
的列,并且名称不区分大小写。

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

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;