SQL Server의 INSERT INTO SELECT로 중복 데이터 방지
SQL Server에서 INSERT INTO SELECT
을 사용할 때 대상 테이블에 삽입되는 데이터가 이미 포함되어 있으면 중복 항목이 쉽게 발생할 수 있습니다. 이를 방지하려면 삽입 전 효율적인 필터링이 중요합니다.
예를 들어 설명해 보겠습니다. Table1
의 데이터를 Table2
에 삽입하고 싶지만 중복 ID는 피하세요.
<code>Table1: ---------- ID Name 1 A 2 B 3 C Table2: ---------- ID Name 1 Z</code>
IF-ELSE
문을 사용하는 것이 가능하지만 다루기가 어려워지고 여러 개의 INSERT INTO
문이 필요합니다.
효율적인 솔루션: NOT EXISTS
, NOT IN
및 LEFT JOIN
보다 효율적인 방법은 삽입하기 전에 NOT EXISTS
, NOT IN
및 LEFT JOIN
을 활용하여 Table2
에 있는 기존 데이터를 필터링하는 것입니다.
1. NOT EXISTS
사용:
이 접근 방식은 삽입하기 전에 Table1
의 Table2
에 있는 각 행이 있는지 확인합니다.
<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. NOT IN
사용:
NOT EXISTS
과 유사하게 NOT IN
는 ID를 비교하여 Table2
에서 ID를 찾을 수 없는 행만 삽입합니다.
<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
사용:
LEFT JOIN
은 Table1
에서 일치 항목이 없는 Table2
의 행을 식별합니다. 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>
세 가지 방법 모두 동일한 결과를 얻을 수 있지만 NOT EXISTS
일반적으로 특히 대규모 데이터 세트의 경우 우수한 성능을 제공하므로 권장되는 접근 방식입니다.
위 내용은 SQL Server에서 INSERT INTO SELECT를 사용할 때 중복 항목을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!