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;