集約関数のDUPLICATEKEY UPDATE
テーブルmoney、テーブルmoney2にある金額の合計をテーブルmoney3に1日に1回、EVENTでインサートします。money、money2の金額は随時変わるため、最終結果をmoney3に毎日更新していきます。
CREATE table money(g_usr_id INT,g_money INT);
CREATE table money2(n_usr_id INT,n_money INT);
CREATE table money_all(o_usr_id INT PRIMARY KEY NOT NULL,g_money_all INT,n_money_all INT);
構文
DELIMITER //
CREATE EVENT money
ON SCHEDULE EVERY 1 DAY
STARTS '2012-09-05 00:30:00'
ENDS '2013-03-31 00:30:00'
DO
BEGIN
INSERT INTO money_all(o_usr_id,g_money_all,n_money_all)
SELECT o_usr_id,SUM(g_money),SUM(n_money) FROM
(SELECT g_usr_id AS o_usr_id,g_money,0 AS n_money FROM money
UNION ALL SELECT n_usr_id,0,n_money FROM money2) AS T
GROUP BY o_usr_id;
END;
//
DELIMITER ;
これで初日目の分は無事インサート出来たのですが、翌日以降EVENTがアップデートしようとするとDUPLICATE KEYエラーが出て更新できていません。(当たり前ですが)
そこで下記のようにON DUPLICATE KEY UPDATE を付けてみたのですが、エラーになってしまいました。
質問です。
集約関数のON DUPLICATE KEY UPDATE以降はどのように書けばいいか、下記の構文を修正いただけませんでしょうか
DELIMITER //
CREATE EVENT money
ON SCHEDULE EVERY 1 DAY
STARTS '2012-09-05 00:30:00'
ENDS '2013-03-31 23:30:00'
DO
BEGIN
INSERT INTO money_all(o_usr_id,g_money_all,n_money_all)
SELECT o_usr_id,SUM(g_money),SUM(n_money) FROM
(SELECT g_usr_id AS o_usr_id,g_money,0 AS n_money FROM money
UNION ALL SELECT n_usr_id,0,n_money FROM money2) AS T
GROUP BY o_usr_id
ON DUPLICATE KEY UPDATE
g_money_all=NEW.SUM(g_money),n_money_all=NEW.SUM(n_money)
FROM
(SELECT g_usr_id AS o_usr_id,g_money,0 AS n_money FROM money
UNION ALL SELECT n_usr_id,0,n_money FROM money2) AS T
GROUP BY o_usr_id;
END;
//
DELIMITER ;
よろしくお願いいたします。(MySQL 5.1です)
お礼
ありがとうございます 希望結果が出せました 大変助かりました