0

異なるデータベースに 2 つの同様のテーブルがあり、一方から他方に挿入したいと考えています。同時に、mySql で「重複 ID」エラーが発生するたびに、新しいテーブルの下部に行が挿入され、新しい一意の ID が割り当てられるようにしたいと考えています。私は試しました:
INSERT...SELECT...ON DUPLICATE KEY UPDATE
しかし、前の行を更新する代わりに「重複キー」が見つかった場合、新しい行に挿入する方法が見つかりません。

4

3 に答える 3

2

ソーステーブル内のが以前に宛先に存在したidかどうかに関係なく、宛先テーブルにコピーされるすべてのレコードにnewを割り当てることができる場合、を提供して、MySQLが値を引き起こすデフォルト値に頼ることを許可することはできません。割り当てられる:ididNULLauto_increment

INSERT INTO destdb.tbl (colA, colB, colC)
SELECT colA, colB, colC
FROM   srcdb.tbl

それ以外の場合は、 :でテーブルを結合することに基づいて、既存の場所に明示的にNULLIF()設定するようなものを使用する必要があります。idNULLSELECT

INSERT INTO destdb.tbl (id, colA, colB, colC)
SELECT NULLIF(src.id, dst.id), src.colA, src.colB, src.colC
FROM   srcdb.tbl src LEFT JOIN destdb.tbl dst USING (id)
于 2012-07-23T13:38:34.410 に答える
1

http://dev.mysql.com/doc/refman/5.1/de/insert-select.htmlのドキュメントによると、これは次のクエリで実現できます。

INSERT INTO `table2` SELECT (NULL, col1, col2, col3) FROM `table1`

このように、autoincrement-value は 'NULL' のままになり、エンジンは既存の AI 値を強制しようとするのではなく、新しい AI 値を与えます。

私はこれをテストしていません。

于 2012-07-23T13:45:05.470 に答える
0
If the id is autoincrement:
Create an additional column in the second table with a reference to the id value in the first table
Sample Select Query: 

SELECT unique_id, data FROM table_1 WHERE id='$id'

Sample Insert Query: 

INSERT INTO table_2 (table_1_unique_id, data) VALUES ($unique_id_from_first_table, $data)

This will solve any duplicate id problems and allow referencing between the two tables
于 2012-07-23T13:46:22.890 に答える