ホームページ > データベース > mysql チュートリアル > 重複チェックを使用してテーブル間でデータをコピーするときに行の整合性を維持するにはどうすればよいですか?

重複チェックを使用してテーブル間でデータをコピーするときに行の整合性を維持するにはどうすればよいですか?

DDD
リリース: 2025-01-04 03:40:38
オリジナル
635 人が閲覧しました

How to Preserve Row Integrity When Copying Data Between Tables with Duplicate Checks?

行の整合性の保持: 重複チェックを使用したデータのコピー

同一のスキーマを持つ 2 つのテーブル間でデータを複製し、データを保証するタスクに直面した場合誠実さが最も重要になります。重複を無視してあるテーブルから別のテーブルに行をコピーしようとすると、一般的な問題が 1 つ発生します。この課題に対処する解決策を詳しく見てみましょう。

当初、提案された解決策には、サブクエリで WHERE 句を使用して重複行をフィルタリングすることが含まれていました。

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

しかし、このアプローチは失敗します。何が重複を構成するかを定義する基準を組み込みます。この問題を修正するには、サブクエリ内に一致基準を指定する追加の WHERE 句が必要です。

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

最後に、特定のフィールド名をリストすることをお勧めします。 SELECT * を使用するのではなく、insert ステートメントを使用して、意図したフィールドのみが確実にコピーされるようにします。

以上が重複チェックを使用してテーブル間でデータをコピーするときに行の整合性を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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