У меня есть две таблицы DailyVisits
и TotalSum
Моя цель состоит в том, чтобы добавить DailyVisits
в с хранимой процедурой/запросом, который я буду запускать в конце дня.SQL - вставить или обновить результат из другой таблицы
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
, а затем добавить правую (или левую) таблицу?
ли эта помощь? http://stackoverflow.com/questions/11883237/insert-or-update-table-from-another-table-with-composite-primary-key –
О, да! Я никогда не думал делать два обновления и вставлять отдельно. Благодаря! –
, пожалуйста, дайте мне возвышение, если мой ответ помог вам –