SQL - 使用另一个表的结果插入或更新

时间:2016-08-12 04:50:29

标签: mysql sql insert sql-update insert-update

我有两个表DailyVisitsTotalSum我的目标是将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

等等。

我尝试了两种方法,但我无法理解解决方案。

在我的查询下方,如果您有其他简单易懂的建议/查询,感谢您的帮助。

Approach1:

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 ;

Approach2:

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值,然后添加右(或左)表吗?

1 个答案:

答案 0 :(得分:0)

就像你需要的那样:

问题是我不知道你想在更新和插入部分做什么:

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 ;