我有两张桌子(粗体= 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用作推荐新值的内容
答案 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)