在出现重复键时更新为新值

3

我有两个表格(粗体=主键):

日志:[id,类型,值]

总计:[类型,总数]

其中“totals”中的“total”值是具有相同类型的所有日志条目的值的总和。我想更新总计表格,因此我运行了一个查询:

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

这个方法一般情况下是可行的,但如果主键已存在,则会出现问题。我正在尝试解决这个问题,添加了以下内容:
 ON DUPLICATE KEY UPDATE total=XXXXXXXX

但是我不知道要将什么作为XXXXXXXXX来引用新值

3个回答

5

您需要:

ON DUPLICATE KEY UPDATE total = VALUES(total)

2

正如Gordon所说,您可以使用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)

1

我不确定我是否理解你想要什么,但:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接