使用新值重复键更新

时间:2013-09-17 11:22:49

标签: mysql sql

我有两张桌子(粗体= PK):

日志:[ id ,类型,值]

总计:[类型,总计]

"总计"价值在"总计"是具有相同类型的日志中所有条目的值的总和。我想更新总计表,以便运行查询:

INSERT INTO totals (type,total) (SELECT type,sum(value) AS total FROM log GROUP BY type)

这种方法很好,除非PK已经存在,我试图解决它添加一个:

 ON DUPLICATE KEY UPDATE total=XXXXXXXX

但我不知道将XXXXXXXXX用作推荐新值的内容

3 个答案:

答案 0 :(得分:4)

你想:

ON DUPLICATE KEY UPDATE total = VALUES(total)

答案 1 :(得分:2)

正如戈登已经说过的那样,你使用VALUES(field)来获取要插入的值,或者只使用field来获取旧值

INSERT INTO .... ON DUPLICATE KEY UPDATE `field` = VALUES(`field`)

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

在您的情况下 - 完整查询应如下所示:

INSERT INTO totals (type,total) (SELECT type,sum(value) AS total FROM log GROUP BY type) ON DUPLICATE KEY UPDATE total = VALUES(total)

答案 2 :(得分:1)

我不确定我是否理解你想要的东西,但是:

ON DUPLICATE KEY UPDATE total = (SELECT COUNT(*) FROM log l WHERE l.type = type)