【发布时间】:2016-12-19 00:10:49
【问题描述】:
我有两个表DailyVisits 和TotalSum 我的目标是使用存储过程/查询将DailyVisits 添加到TotalSum,我将在一天结束时运行。
DailyVisits
UserId,PageId,Visits
1,1,32
2,123,34
4,12,213
5,1,1
TotalSum
UserId,PageId,TotalVisits
1,1,300
1,41,2
3,12,213
5,1,653
等等。
我尝试了两种方法,但无法找到解决方案。
在我的查询下,如果您有其他简单易懂的建议/查询,感谢您的帮助。
方法1:
delimiter $$
CREATE PROCEDURE UPSERT_DAILYSUM()
BEGIN
IF EXISTS (SELECT Id, PageId FROM DailyVisits) THEN
UPDATE TotalSum TotalVisits = TotalVisits + (SELECT Visits FROM DailyVisits);
ELSE INSERT INTO TotalSum (UserId,PageId,TotalVisits)
VALUES (SELECT Id,PageId,Visits);
END IF
END $$
delimiter ;
方法2:
INSERT INTO TotalSum (UserId,PageId,TotalVisits) VALUES(SELECT * FROM DailyVisits)
ON DUPLICATE KEY UPDATE (PageId,TotalVisits)
VALUES(SELECT PageId,Visits FROM DailyVisits)
这就是我正在努力解决的问题:当键不存在时,我将如何获得不同的值?我可以使用RIGHT JOIN(或LEFT JOIN)并检查NULL 值,然后添加右(或左)表吗?
【问题讨论】:
-
哦,是的!我从来没有想过分别做两个更新和插入。谢谢!
-
如果我的回答对你有帮助,请给我点赞
-
是的,当您构建一个好的触发器来执行此操作时,可能会发生这种情况。同时插入然后更新或插入到另一个表。
-
与事件相同.. SP 与事件
标签: mysql sql insert sql-update insert-update