2016-05-26 28 views
1

現在、csvファイルのデータをデータベースのテーブルにロードし、新しいエントリを挿入して古いエントリを更新しようとしています。このテーブルには、フィールド1(field1、field2、field3、field4、field5)とプライマリキーとしてのカラムがあり、csvにはカラム(field1、field2、field3)のみの値があります。これに接近する最善の方法は何でしょうか? は現在、私は次のようにそれに近づいて考えていた:tmpデータベースのテーブルから別のデータベースのテーブルに挿入して更新する

  • tmpにテーブルを作成し、

    のようなクエリで古いエントリを更新
  • 「LOAD DATAを」を使用してtmp_tableでtmp_table

  • ロードのcsvを言います
    UPDATE db.table1 t INNER JOIN tmp.tmp_table s ON (t.field1=s.field1) 
    SET t.field1 = s.field1, t.field2 = s.field2, t.field3 = s.field3 
    
  • を挿入し、新しいエントリ

    INSERT INTO db.table1(field1, field2, field3) 
    SELECT t.field1, t.field2, t.field3 
    FROM tmp.tmp_table t 
    LEFT JOIN db.table1 v ON (t.field1=v.field1) 
    WHERE v.field1=NULL 
    

ステップの改善/最適化/修正に関するコメントはありますか?

答えて

1

あなたはMySQLを使用しているので、私はこの非一般的な解決策を提案します。

tmpテーブルにfield4とfield5を含めます。

table1の既存のレコードの値でtmpテーブルの更新フィールド4とフィールド5を作成した後。その後

UPDATE tmp.tmp_table s INNER JOIN db.table1 t ON (t.field1=s.field1) 
SET s.field4 = t.field4, s.field5 =t.field5 

REPLACE INTO db.table1 VALUES (field1, field2, field3, field4, field5) 
SELECT t.field1, t.field2, t.field3, t.field4, t.field5 
FROM tmp.tmp_table t 
関連する問題