ホームページ > データベース > mysql チュートリアル > 重複を作成せずにテーブル間で行をコピーするにはどうすればよいですか?

重複を作成せずにテーブル間で行をコピーするにはどうすればよいですか?

DDD
リリース: 2024-12-27 05:14:13
オリジナル
581 人が閲覧しました

How to Copy Rows Between Tables Without Creating Duplicates?

データを複製せずにテーブル間で行をコピーする

あるテーブルから別のテーブルにデータを転送する場合、重複した行が挿入されないようにすることが重要です。これを実現するには、既存のレコードをフィルターで除外するメソッドが必要です。

最初のアプローチでは、サブクエリで WHERE 句を使用して一意の行を識別しようとしました。ただし、サブクエリには重複を判断するための基準がありませんでした。

WHERE フィルタリングを備えたサブクエリを使用した解決策

重複を効果的に除外するには、次のようにサブクエリを変更できます。

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.)
                 )
ログイン後にコピー

この更新されたサブクエリは、ソース テーブルと宛先テーブルの間で特定のフィールドを比較する条件を追加します。重複が存在するかどうかを確認します。

外部結合を使用した解決策

または、外部結合を使用して同じ結果を得ることができます。外部結合は、あるテーブルからすべての行を取得し、別のテーブルから一致する行を取得し、一致しない行は NULL として残します。

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
ログイン後にコピー

この場合、外部結合はキー フィールド (Key1、Key2、等。)。宛先テーブルのどの行とも一致しないソース テーブルの行にはキー フィールドに NULL 値が設定され、これらの行は宛先テーブルに挿入されます。

追加の考慮事項

ソーステーブルからの重複を防ぐことだけを懸念している場合は、SELECT で個別のキーワードを使用できます。ステートメント:

INSERT INTO destTable
SELECT Distinct field1,field2,field3,... 
FROM srcTable  
ログイン後にコピー

最後に、パフォーマンス上の理由から、SELECT * を使用する代わりに INSERT ステートメントで特定のフィールドを指定することをお勧めします。

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

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