0

'insert into' mysqlコマンドを使用してtable1の内容をtable2に移動したいのですが、table2には'同じ'主キーがある可能性があります。挿入ステートメントの実行時に、table2のレコード(同じ主キーを持つ)をtable1のレコードに置き換えたいと思います。これを実現するために「または置換」を使用できますか?

4

3 に答える 3

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が実行されます。

于 2012-08-01T15:59:43.340 に答える
2

ON DUPLICATEKEYUPDATE句を指定してINSERT...SELECTを使用します。

INSERT INTO table2 
  SELECT * FROM table1 ON DUPLICATE KEY UPDATE table2.field1 = table1.field1

簡潔にするために*を使用することに注意してください。ただし、update句では、フィールドを個別に指定する必要があり、insert句とselect句でも指定する必要があります。

于 2012-08-01T16:00:48.790 に答える
0

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ます。

于 2012-08-01T16:14:20.097 に答える