ホームページ >データベース >mysql チュートリアル >SQL Server の INSERT INTO SELECT を使用してデータを挿入するときに重複を効率的に回避するにはどうすればよいですか?

SQL Server の INSERT INTO SELECT を使用してデータを挿入するときに重複を効率的に回避するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-13 10:22:42158ブラウズ

How to Efficiently Avoid Duplicates When Inserting Data Using SQL Server's INSERT INTO SELECT?

SQL Server: INSERT INTO SELECT

中の重複レコードの防止

SQL Server のあるテーブルから別のテーブルにデータを挿入するには、エントリの重複を避けるために慎重に検討する必要があります。 これは、宛先テーブルに競合する可能性のあるデータがすでに含まれている場合に重要です。次の例を考えてみましょう:

<code>Table1
----------
ID   Name
1    A
2    B
3    C

Table2
----------
ID   Name
1    Z</code>

単純な INSERT INTO SELECT は、ID が重複しているため失敗します (1)。 条件付き IF-ELSE ステートメントは可能ですが、非効率的で面倒です。 より効率的な代替手段が存在します:

方法 1: NOT EXISTS

を使用する

これは一般的に最も効率的なアプローチです:

<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>

Table1ID が存在しない行のみが Table2 から挿入されます。

方法 2: NOT IN

を使用する

このメソッドは、選択プロセス中に重複をフィルターします:

<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>

このアプローチは、特に大規模なデータセットの場合、NOT EXISTS よりも効率が低くなります。

方法 3: LEFT JOINIS 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>

A LEFT JOIN は一致しない行を識別します。 NULLTable2.id 値を持つもののみが挿入されます。

特に大規模なデータセットで最適なパフォーマンスを得るには、NOT EXISTS メソッドをお勧めします。 他の要因により推奨されない限り、LEFT JOIN アプローチは避けてください。 特定のニーズとデータセットのサイズに最適な方法を選択してください。

以上がSQL Server の INSERT INTO SELECT を使用してデータを挿入するときに重複を効率的に回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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