ホームページ >データベース >mysql チュートリアル >SQL Server で INSERT INTO SELECT を使用するときに重複エントリを防ぐにはどうすればよいですか?

SQL Server で INSERT INTO SELECT を使用するときに重複エントリを防ぐにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-13 11:59:55992ブラウズ

How Can I Prevent Duplicate Entries When Using INSERT INTO SELECT in SQL Server?

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 EXISTSNOT IN、および LEFT JOIN

より効率的な方法では、NOT EXISTSNOT INLEFT 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 JOINIS 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。