'insert into' mysqlコマンドを使用してtable1の内容をtable2に移動したいのですが、table2には'同じ'主キーがある可能性があります。挿入ステートメントの実行時に、table2のレコード(同じ主キーを持つ)をtable1のレコードに置き換えたいと思います。これを実現するために「または置換」を使用できますか?
3 に答える
このようなことを試してください(正確なスキーマを知らなくても、これは単なる例にすぎません)
INSERT INTO tbl_a (a,b,c)
SELECT a,b,c FROM tbl_b
ON DUPLICATE KEY UPDATE b = tbl_b.b, c = tbl_b.c
のドキュメントからINSERT on DUPLICATE
ON DUPLICATE KEY UPDATEを指定し、UNIQUE索引またはPRIMARY KEYに重複値を引き起こす行が挿入された場合、古い行のUPDATEが実行されます。
ON DUPLICATEKEYUPDATE句を指定してINSERT...SELECTを使用します。
INSERT INTO table2
SELECT * FROM table1 ON DUPLICATE KEY UPDATE table2.field1 = table1.field1
簡潔にするために*を使用することに注意してください。ただし、update句では、フィールドを個別に指定する必要があり、insert句とselect句でも指定する必要があります。
table1のキーと重複するtable2の主キーが他の場所の外部キーによって参照されていない場合、最も簡単な方法はREPLACE ... INTO:を使用することです。
「REPLACEはINSERTとまったく同じように機能しますが、テーブル内の古い行がPRIMARY KEYまたはUNIQUEインデックスの新しい行と同じ値である場合、新しい行が挿入される前に古い行が削除されます。」
だから、あなたはこのようなことをするでしょう:
REPLACE INTO table2 (a, b, c)
SELECT a, b, c FROM table1;
キーが並べ替えられるため、の行table2
と同じIDを持つ行は、の行データtable1
で上書きされtable1
ます。