重複を無視してテーブル間で行をコピーする
複数のテーブルを操作する場合、多くの場合、テーブル間で行をコピーする必要があります。ただし、重複行の挿入を防ぐことが重要です。次の説明では、このタスクの実装に関するユーザーの問題について説明します。
最初、ユーザーは、重複しない行を識別するためにサブクエリで 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 サイトの他の関連記事を参照してください。