2016-05-31 17 views
0

私は2つのデータベーステーブルを持っています.2つのテーブルは同じ構造を持っています。今私は古いテーブルから新しいテーブルにデータを挿入したい場合は、データがすでに存在する場合は古いデータを更新し、それ以外の場合は新しいデータを挿入します。私はいくつかの列フィールドの値を一致させることによってデータを挿入または更新したい。どんな助け?古いテーブルから新しいテーブルにデータを挿入する

+0

何を試しましたか?どのDBを使用していますか?あなたのDBのスキーマは? – Lee

答えて

0

MySQLのON DUPLICATE KEY UPDATE機能を利用することができます。 MySQL docから -

あなたがDUPLICATE KEY UPDATE ON指定し、行は がUNIQUEインデックスまたはPRIMARY KEY内の重複値を引き起こすことに挿入されている場合は、MySQLの は古い行のUPDATEが実行されます。

したがって、テーブルにキーが定義されている場合は、この機能を使用できます。例えば、あなたのステートメントは次のようになります:

insert into target_table (col1, col2, ...) 
select col1, col2,... from source_table 
on duplicate key update 
    col1 = values(col1), 
    col2 = values(col2), 
+0

Broは "ON DUPLICATE KEY UPDATE"でユニークなインデックスまたはプライマリキーのみをチェックしますか? –

+0

レコードを一意にする列に少なくともUNIQUEインデックスを作成する必要があります – hashbrown

+0

私のテーブルにはプライマリキー(id)がありません。ユニークなインデックスとテーブルは1000のデータを持っています –

0

最も良い方法は、左外部結合の概念を使用することです。それは簡単になります。

INSERT INTO table1 
    (col_1, col_2, col_3, col_4, col_5) values("","","","") 
SELECT 
    table2_col_1, 
    table2_col_2, 
    table2_col_3, 
    table2_col_4, 
    1 
FROM 
    table_2 AS t2 
LEFT OUTER JOIN 
    table1 AS t1 
ON 
    t1.col_1 = t2.table2_col_1; 

UPDATE table_2 
SET table2_col_1 = 'value'// here is the value that you need to implement 
WHERE t1.col_1=t2.table2_col_1;//here is your condition 
0

あなたの質問から、私はあなたのテーブル2はあまり重要ではないことを理解しました。 したがって、構造体が影響を受けないように、table2全体に存在する値を削除することができます。終了したら、insertクエリをエクスポートしてtable1に存在する値を実装できます。

+0

Bro私は私の古いテーブルと新しいテーブルの何千(古いプラスいくつかの新しい)の約500のデータを持っていますが、古いテーブルからいくつかのデータを見逃しました。古いテーブル –

関連する問題