2012-01-31 177 views
3

我想GROUP和聚合一個表中的行並插入到另一個表中,並更新聚合值。什麼是SQL命令?INSERT SELECT ON DUPLICATE UPDATE的SQL語法

INSERT INTO tbdetail (detail, views) 
(SELECT detail, SUM(views) AS viewsall 
FROM tb 
GROUP BY detail) 
//ON DUPLICATE KEY UPDATE views = views + viewsall <- how to update here? 
+1

僅供參考,這通常被稱爲* upsert * – 2012-01-31 18:34:28

回答

3

在MySQL中,使用INSERT ... SELECT語句時,你可以參考使用VALUES()功能SELECT聲明的價值之一:

INSERT INTO tbdetail (detail, views) 

SELECT detail, SUM(views) AS viewsall FROM tb GROUP BY detail 

ON DUPLICATE KEY UPDATE views = views + VALUES(views); 

點擊此處瞭解詳情:http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_values

+0

'字段列表'中的未知列'viewsall' – DrXCheng 2012-01-31 18:33:52

+0

啊!我只是*發現了...... VALUES()中的參數應該與INSERT字段名稱匹配,而不是匹配SELECT字段名稱。道歉! /固定 – 2012-01-31 18:35:18

相關問題