あるテーブルから、最初のテーブルに存在しない別のテーブルにデータをコピーするにはどうすればよいでしょうか。表の列の 1 つは主キーです。
INSERT INTO table SELECT * FROM db2.table;
ERROR 1062 (23000): Duplicate entry '100001' for key 'id_UNIQUE'
これを試して:
INSERT INTO table
SELECT T1.*
FROM db2.table T1
LEFT JOIN table T2
ON T1.Id = T2.Id
WHERE T2.Id IS NULL;
次のように、述語NOT IN
を使用してこれを行うことができます。
INSERT INTO table1
SELECT *
FROM db2.table2
WHERE table1ReferenceID NOT IN(SELECT id_UNIQUE FROM table1);
これはtable1ReferenceID
、これが最初のテーブルにあるかどうかをチェックします。したがって、SELECT
句は、最初のテーブル table1 に既に表示されているものを除いて、2 番目のテーブルからすべての行を選択します。
注意:列は2 番目の表table1ReferenceID
の参照です。id_UNIQUE
これに対する他の代替手段はLEFT JOIN
、@ HamletHakobyanの回答とNOT EXISTS
.
WHERE [primary_key_table1] not IN (SELECT [primary_key_table2] FROM [table2])
だから私は次のようなものを提案します
INSERT INTO table (SELECT * FROM db2.table WHERE id NOT IN (SELECT id FROM table));