1. ホーム
  2. sql

[解決済み] SQL Server の INSERT INTO SELECT クエリで重複を回避する。

2022-08-15 06:33:40

質問

以下の2つのテーブルがあります。

Table1
----------
ID   Name
1    A
2    B
3    C

Table2
----------
ID   Name
1    Z

からデータを挿入する必要があります。 Table1 から Table2 . 次のような構文が使えますね。

INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1

しかし、私の場合、重複したIDが Table2 (といった具合になります(私の場合、ちょうど" 1 ")であり、それはエラーを投げるので、私は再びそれをコピーしたくありません。

このように書くことができます。

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

を使わずにこれを行う良い方法はありますか? IF - ELSE ? 私は、2つの INSERT INTO-SELECT ステートメントを回避したい。

どのように解決するのですか?

使用方法 NOT EXISTS :

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)

使用方法 NOT IN :

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)

使用方法 LEFT JOIN/IS NULL :

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

3つのオプションのうち LEFT JOIN/IS NULL はあまり効率的ではありません。 参照 を参照してください。 .