2016-08-12 10 views
0

私は2つのテーブルを持っていますDailyVisitsTotalSumDailyVisitsTotalSumに追加するのは、その日の終わりに実行するストアドプロシージャ/クエリです。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 

などとなる。

私は2つのアプローチを試みましたが、私は解決策の中で頭を上げることができません。

これを達成するための私の質問の下に、あなたが理解するのに十分な別の提案/クエリがあれば、私はあなたの助けに感謝します。

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

は、このヘルプをしていますか? http://stackoverflow.com/questions/11883237/insert-or-update-table-from-another-table-with-composite-primary-key –

+0

ああ、そうです!私は2つの更新を行い、別々に挿入することを考えたことはありません。ありがとう! –

+0

私の答えがあなたを助けた場合私にupvoteを与えてください –

答えて

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 ; 
+0

何を挿入したいのですか?何を更新したいですか?私はどのようなデータ値を意味します。それはあなたにそれを行うためのガイドを持っているほんの一例です。 –

+0

UserIdとPageIdが一致した場合、Visits列の合計を取得したいと考えています。存在しない場合は、新しいレコードを作成します。 –

+0

合計金額はどういう意味ですか?レコードが変わるたびに? –

関連する問題