ホームページ > データベース > mysql チュートリアル > 重複を避けながらあるテーブルから別のテーブルに行をコピーするにはどうすればよいですか?

重複を避けながらあるテーブルから別のテーブルに行をコピーするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-28 03:06:09
オリジナル
428 人が閲覧しました

How Can I Copy Rows from One Table to Another While Preventing Duplicates?

重複を避けながらテーブルに行をコピーする

目標は、あるテーブル (srcTable) から別のテーブル (destTable) にすべての行を転送することです。 、重複したエントリは除きます。重複を除外するサブクエリで WHERE 句を追加するのは簡単そうに見えますが、このアプローチは失敗する可能性があります。

サブクエリの問題:

元のクエリは次のとおりです。 :

INSERT INTO destTable
SELECT * FROM srcTable
WHERE NOT EXISTS(SELECT * FROM destTable)
ログイン後にコピー

ただし、サブクエリはすべての行を返すため、このクエリは行を挿入しません。 destTable。srcTable 内の行と一致するかどうかは関係ありません。サブクエリを機能させるには、関連フィールドに基づいて重複行を識別するための追加条件を含める必要があります。

改訂されたサブクエリ:

INSERT INTO destTable
SELECT Field1, Field2, Field3, ...
FROM srcTable
WHERE NOT EXISTS(SELECT *
                 FROM destTable
                 WHERE (srcTable.Field1 = DestTable.Field1 AND
                       srcTable.Field2 = DestTable.Field2 ... etc.))
ログイン後にコピー

この改訂されたサブクエリは、特定の内容を比較します。フィールドを使用して重複を特定し、挿入から除外します。

外部結合代替:

別のアプローチは、外部結合を使用することです:

INSERT INTO destTable
SELECT s.field1, s.field2, s.field3,...
FROM srcTable s 
LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...)
WHERE d.Key1 IS NULL
ログイン後にコピー

この外部結合手法では、destTable に一致するキーを持つ srcTable の行がフィルターで除外され、挿入中に重複が除外されます。 .

ソーステーブルのアドレス指定重複:

sourceTable に重複行が含まれていることが懸念される場合は、個別の行を選択するようにクエリを変更する必要があります:

INSERT INTO destTable
SELECT DISTINCT Field1, Field2, Field3,...
FROM srcTable  
ログイン後にコピー

INSERT ステートメントに特定のフィールド名を含めることをお勧めしますSELECT *.

を使用するよりも

以上が重複を避けながらあるテーブルから別のテーブルに行をコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート