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

标签 mysql sql insert sql-update insert-update

我有两个表 DailyVisitsTotalSum 我的目标是使用存储过程将 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/

相关文章:

php - 从 Mysql 在 Php 中检索和显示数据

php mysql 三乘三排列html输出

php - 错误:警告:mysqli_query()期望参数1为mysqli

php - MySQL INSERT 查询 - 不再有效

mysql - 为什么我的 MySQL 版本不同?

mysql - 如何在使用 LOAD DATA INFILE 导入大数据文件时保持 MYSQL 性能?

mysql - 插入到有字符限制的表中

java - 批量更新异常 : Unknown column in where clause

sql - 在 SQL 中插入多列和多个值

php - $_POST 未插入数据库 - PHP MySQL