SQL Server INSERT INTO SELECT ステートメントでのデータの重複を回避する方法
INSERT INTO SELECT ステートメントを使用する場合は、重複したデータの挿入を防ぐことが重要です。この記事では、IF-ELSE などの条件文を使用せずに SQL Server でのこのような問題を回避する効果的な方法をいくつか説明します。
方法 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>
このクエリは、一致する ID が TABLE_2 に存在するかどうかを確認することで重複挿入を防ぎます。すでに存在する場合は、この行をスキップしてください。
方法 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 と同様に、NOT IN 句も TABLE_2 にすでに存在する ID を除外します。 TABLE_1 の ID が TABLE_2 にあるかどうかを確認し、存在しない場合にのみ挿入します。
方法 3: LEFT JOIN/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>
挿入する必要がある行をより明確に識別するには、LEFT JOIN と IS NULL を使用します。このクエリは、TABLE_2 に一致する ID がない TABLE_1 のすべての行を選択して挿入します。
パフォーマンスの比較
パフォーマンスの点では、LEFT JOIN/IS NULL は一般に NOT EXISTS や NOT IN ほど効率的ではありません。これは、LEFT JOIN ではより多くのテーブルと行をスキャンする必要があり、より多くのリソースを消費するためです。大規模なデータ セットの場合は、NOT EXISTS または NOT IN を使用することをお勧めします。
以上がIF-ELSE ステートメントを使用しない SQL Server の INSERT INTO SELECT で重複行を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。