ホームページ >データベース >mysql チュートリアル >SQL Server で INSERT INTO SELECT を使用するときに重複エントリを防ぐにはどうすればよいですか?
SQL Server の INSERT INTO SELECT による重複データの回避
SQL Server で INSERT INTO SELECT
を使用する場合、挿入されるデータがターゲット テーブルに既に含まれている場合、重複エントリが簡単に発生する可能性があります。 これを防ぐには、挿入前に効率的なフィルタリングを行うことが重要です。
例を挙げて説明しましょう。 Table1
から Table2
にデータを挿入したいのですが、ID の重複は避けたいです:
<code>Table1: ---------- ID Name 1 A 2 B 3 C Table2: ---------- ID Name 1 Z</code>
IF-ELSE
ステートメントの使用は可能ですが、扱いにくく、複数の INSERT INTO
ステートメントが必要になります。
効率的なソリューション: NOT EXISTS
、NOT IN
、および LEFT JOIN
より効率的な方法では、NOT EXISTS
、NOT IN
、LEFT JOIN
を利用して、挿入前に Table2
内の既存のデータを除外します。
1. NOT EXISTS
の使用:
このアプローチでは、挿入前に Table1
内の Table2
の各行の存在を確認します。
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 WHERE NOT EXISTS (SELECT id FROM TABLE_2 t2 WHERE t2.id = t1.id);</code>
2. NOT IN
の使用:
NOT EXISTS
と同様に、NOT IN
は ID を比較し、Table2
で ID が見つからない行のみを挿入します。
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 WHERE t1.id NOT IN (SELECT id FROM TABLE_2);</code>
3. LEFT JOIN
と IS NULL
の使用:
LEFT JOIN
は、Table1
に一致しない Table2
の行を識別します。 IS NULL
は、これらの不一致の行をフィルターします。
<code class="language-sql">INSERT INTO TABLE_2 (Id, name) SELECT t1.id, t1.name FROM TABLE_1 t1 LEFT JOIN TABLE_2 t2 ON t2.id = t1.id WHERE t2.id IS NULL;</code>
3 つの方法はすべて同じ結果を達成しますが、NOT EXISTS
は一般に、特に大規模なデータセットで優れたパフォーマンスを提供するため、推奨されるアプローチです。
以上がSQL Server で INSERT INTO SELECT を使用するときに重複エントリを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。