2017-11-03 10 views
3

重複したくないレコードを挿入しようとすると問題が発生します。INSERT INTO WHERE NOT INまたはNOT EXISTテーブルのオリジンに重複があります

私はTABLE1とTABLE2を持っていると私はTABLE2にTABLE1からレコードを挿入したいので、私はこのクエリを使用します。:この問題は、それが行く私がここにグーグルで見つかったソリューションとは異なり

INSERT INTO table1 
SELECT * 
FROM table2 
WHERE table2.importId NOT IN 
(
    SELECT importId 
    FROM table1 
); 

これは動作しますTABLE2が保証されている場合にのみ重複したimportIdが含まれていません。 TABLE2に重複したimportIdがあり、TABLE2からのimportIdを含んでいないTABLE1に挿入したい場合。上記のスクリプトは、レコードの挿入時に存続するため、TABLE1に重複したimportIdが作成されます。

は、私はすでに試した:

INSERT INTO table1 
SELECT * 
FROM table2 
WHERE NOT EXIST 
(
    SELECT importId 
    FROM table1 
    WHERE table1.importId <> table2.importId 
); 

同じ結果が発生しました!今私は重複を削除する別のクエリを記述する必要があります。それでは、この問題を回避する方法はありますか?

私はphpmyadmin BTWでMYSQLを使用しています。

答えて

5

これにはDISTINCTキーワードを使用する必要があります。を参照してください。

INSERT INTO table1 
SELECT DISTINCT * 
FROM table2 
WHERE table2.importId NOT IN 
(
    SELECT importId 
    FROM table1 
); 

https://www.w3schools.com/sql/sql_distinct.aspはあなたが望むものにする必要がありますが、あなただけの1列全体に重複を持たないようにする必要がある場合、私は、キーワードBY GROUPがうまくいくと思います。多分このようなもの

INSERT INTO table1 
SELECT * 
FROM table2 
WHERE table2.importId NOT IN 
(
    SELECT importId 
    FROM table1 
) GROUP BY (table2.importId); 
+0

ああ大変ありがとう – Photonic

関連する問題