2011-06-02 12 views
1

私は2つのテーブル、一時的なテーブルと永久テーブルを持っています。 私の目的は、一時データを永久テーブルにコピーすることですが、永続テーブルを更新する必要があります。以下はMYSQL ON DUPLICATEテーブルをコピーするためのキー更新

は、私は確かH23までのすべてのH00はtb_permanant_dataに値を追加することによって更新されますが、私はそれを行う方法については考えているようにしたいテーブル

### Temp. table 
CREATE TABLE `tb_temp_data` (
    `key_id` varchar(20) NOT NULL DEFAULT '', 
    `h00` int(11) DEFAULT '0', 
    `h01` int(11) DEFAULT '0', 
    `h02` int(11) DEFAULT '0', 
    `h03` int(11) DEFAULT '0', 
    `h04` int(11) DEFAULT '0', 
    `h05` int(11) DEFAULT '0', 
    `h06` int(11) DEFAULT '0', 
    `h07` int(11) DEFAULT '0', 
    `h08` int(11) DEFAULT '0', 
    `h09` int(11) DEFAULT '0', 
    `h10` int(11) DEFAULT '0', 
    `h11` int(11) DEFAULT '0', 
    `h12` int(11) DEFAULT '0', 
    `h13` int(11) DEFAULT '0', 
    `h14` int(11) DEFAULT '0', 
    `h15` int(11) DEFAULT '0', 
    `h16` int(11) DEFAULT '0', 
    `h17` int(11) DEFAULT '0', 
    `h18` int(11) DEFAULT '0', 
    `h19` int(11) DEFAULT '0', 
    `h20` int(11) DEFAULT '0', 
    `h21` int(11) DEFAULT '0', 
    `h22` int(11) DEFAULT '0', 
    `h23` int(11) DEFAULT '0', 
    `grand_total` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`key_id`) 
) ENGINE=MyISAM; 

### Permanant table 
CREATE TABLE `tb_permanant_data` (
    `key_id` varchar(20) NOT NULL DEFAULT '', 
    `h00` int(11) DEFAULT '0', 
    `h01` int(11) DEFAULT '0', 
    `h02` int(11) DEFAULT '0', 
    `h03` int(11) DEFAULT '0', 
    `h04` int(11) DEFAULT '0', 
    `h05` int(11) DEFAULT '0', 
    `h06` int(11) DEFAULT '0', 
    `h07` int(11) DEFAULT '0', 
    `h08` int(11) DEFAULT '0', 
    `h09` int(11) DEFAULT '0', 
    `h10` int(11) DEFAULT '0', 
    `h11` int(11) DEFAULT '0', 
    `h12` int(11) DEFAULT '0', 
    `h13` int(11) DEFAULT '0', 
    `h14` int(11) DEFAULT '0', 
    `h15` int(11) DEFAULT '0', 
    `h16` int(11) DEFAULT '0', 
    `h17` int(11) DEFAULT '0', 
    `h18` int(11) DEFAULT '0', 
    `h19` int(11) DEFAULT '0', 
    `h20` int(11) DEFAULT '0', 
    `h21` int(11) DEFAULT '0', 
    `h22` int(11) DEFAULT '0', 
    `h23` int(11) DEFAULT '0', 
    `grand_total` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`key_id`) 
) ENGINE=MyISAM; 

INSERT INTO tb_permanant_data 
     SELECT * FROM tb_temp_data ; 
     ON DUPLICATE KEY UPDATE h00 = ? 

です...

誰も助けることができますか?

おかげ

+1

これらの24個の 'hxx'フィールドには異なるデータが保存されていますか?または、1日の1時間ごとのデータだけ?後者の場合は、テーブルの正規化が必要です。 –

+0

はい、24時間保管します。あまりにも多くのキーがあるので、この設計をしなければならない...だから、どのようにSQLステートメントですか? –

答えて

2
INSERT INTO tb_permanant_data SELECT * FROM tb_temp_data 
ON DUPLICATE KEY UPDATE 
    h00 = VALUES(h00), 
    h01 = VALUES(h01), 
    h02 = VALUES(h02), 
    h03 = VALUES(h03), 
    h04 = VALUES(h04), 
    h05 = VALUES(h05), 
    h06 = VALUES(h06), 
    h07 = VALUES(h07), 
    h08 = VALUES(h08), 
    h09 = VALUES(h09), 
    h10 = VALUES(h10), 
    h11 = VALUES(h11), 
    h12 = VALUES(h12), 
    h13 = VALUES(h13), 
    h14 = VALUES(h14), 
    h15 = VALUES(h15), 
    h16 = VALUES(h16), 
    h17 = VALUES(h17), 
    h18 = VALUES(h18), 
    h19 = VALUES(h19), 
    h20 = VALUES(h20), 
    h21 = VALUES(h21), 
    h22 = VALUES(h22), 
    h23 = VALUES(h23); 

注、表tb_permanant_dataは(idによって)tb_temp_dataに存在しない行を含むことができます。

関連する問題