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

重複エントリを防ぎながらテーブル間で行をコピーするにはどうすればよいですか?

DDD
リリース: 2025-01-03 08:57:40
オリジナル
748 人が閲覧しました

How Can I Copy Rows Between Tables While Preventing Duplicate Entries?

重複を無視してテーブル間で行をコピーする

複数のテーブルを操作する場合、多くの場合、テーブル間で行をコピーする必要があります。ただし、重複行の挿入を防ぐことが重要です。次の説明では、このタスクの実装に関するユーザーの問題について説明します。

最初、ユーザーは、重複しない行を識別するためにサブクエリで 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.)
                 )
ログイン後にコピー

また、より簡潔にするために外部結合を使用することもできます。

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

これらのアプローチは、宛先での重複行の問題に対処します。テーブル。ただし、ソース テーブル内の重複行が問題である場合は、次のクエリを使用できます。

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

最後に、* に依存するのではなく、INSERT ステートメントでフィールドを明示的にリストすることをお勧めします。データの整合性を確保するためのワイルドカード。

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

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