ホームページ > データベース > mysql チュートリアル > IF-ELSE ステートメントを使用しない SQL Server の INSERT INTO SELECT で重複行を回避する方法

IF-ELSE ステートメントを使用しない SQL Server の INSERT INTO SELECT で重複行を回避する方法

Susan Sarandon
リリース: 2025-01-13 10:58:43
オリジナル
429 人が閲覧しました

How to Avoid Duplicate Rows in SQL Server's INSERT INTO SELECT Without IF-ELSE Statements?

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 サイトの他の関連記事を参照してください。

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