我有两个表 DailyVisits
和 TotalSum
我的目标是使用存储过程将 DailyVisits
添加到 TotalSum
/query 我将在一天结束时运行。
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
值,然后添加右(或左)表吗?
最佳答案
与您需要的相同:
问题是我不知道你想在更新和插入部分做什么:
delimiter $$
CREATE PROCEDURE UPSERT_DAILYSUM()
BEGIN
Declare idvar int(50) DEFAULT 0;
Declare pageidvar int(50) DEFAULT 0;
SELECT Id, PageId INTO idvar,pageidvar FROM DailyVisits;
if(LENGTH(idvar)>0 THEN
UPDATE TotalSum TotalVisits = TotalVisits + (SELECT Visits FROM DailyVisits);
ELSE
INSERT INTO TotalSum (UserId,PageId,TotalVisits) VALUES (SELECT Id,PageId,Visits);
END $$
delimiter ;
关于mysql - SQL - 使用另一个表的结果插入或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38910165/