3

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

日志:[ id,类型,值]

总计:[类型,总计]

其中“totals”处的“total”值是日志中所有同类条目的值之和。我想更新总计表,所以我运行一个查询:

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

这工作正常,除非 PK 已经存在,我正在尝试添加一个:

 ON DUPLICATE KEY UPDATE total=XXXXXXXX

但我不知道该放什么作为 XXXXXXXXX 来引用新值

4

3 回答 3

5

你要:

ON DUPLICATE KEY UPDATE total = VALUES(total)
于 2013-09-17T11:24:26.587 回答
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)
于 2013-09-17T12:06:34.973 回答
1

我不确定我是否明白你想要什么,但是:

ON DUPLICATE KEY UPDATE total = (SELECT COUNT(*) FROM log l WHERE l.type = type)
于 2013-09-17T11:26:34.380 回答