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

SQL Server で INSERT INTO SELECT を使用するときに重複を効率的に回避するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-13 11:21:43
オリジナル
982 人が閲覧しました

How to Efficiently Avoid Duplicates When Using INSERT INTO SELECT in SQL Server?

SQL Server の INSERT INTO SELECT ステートメントは、データの重複を効率的に回避します

データベース操作では、重複を避けながらあるテーブルから別のテーブルにデータを挿入するのが一般的なタスクです。この記事では、ID の重複を避けるために Table1 のレコードを Table2 に効率的に追加する方法について説明します。

1 つの方法は、IF-ELSE ステートメントを使用して、挿入する前に ID が Table2 に存在するかどうかを確認することです。

<code class="language-sql">IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
  INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 
ELSE
  INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id1</code>
ログイン後にコピー

ただし、この方法では、条件に基づいて複数の INSERT INTO-SELECT ステートメントを記述する必要があります。より効率的なソリューションを求めて、3 つの代替案を検討します。

1. 存在しません

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

では使用しないでください
<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 を使用します

<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 つのメソッドのうち、LEFT JOIN/IS NULL メソッドは他のメソッドよりも効率が低くなります。重複を避けながら SQL Server の INSERT INTO SELECT クエリにデータを挿入するには、NOT EXISTS および NOT IN 手法を使用すると最高のパフォーマンスが得られます。

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

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