SQL Server: INSERT INTO SELECT
SQL Server에서 한 테이블의 데이터를 다른 테이블에 삽입하려면 항목이 중복되지 않도록 주의 깊게 고려해야 합니다. 이는 대상 테이블에 잠재적으로 충돌할 수 있는 데이터가 이미 포함되어 있는 경우 매우 중요합니다. 다음 예를 고려해보세요:
<code>Table1 ---------- ID Name 1 A 2 B 3 C Table2 ---------- ID Name 1 Z</code>
간단한 INSERT INTO SELECT
은 ID
(1) 중복으로 인해 실패합니다. 조건부 IF-ELSE
문도 가능하지만 비효율적이고 번거롭습니다. 더 효율적인 대안이 있습니다:
방법 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>
Table1
에 ID
이 없는 Table2
의 행만 삽입됩니다.
방법 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
보다 효율성이 떨어집니다.
방법 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>
A LEFT JOIN
는 일치하지 않는 행을 식별합니다. NULL
에 Table2.id
값이 있는 것만 삽입됩니다.
특히 대규모 데이터 세트의 경우 최적의 성능을 위해서는 NOT EXISTS
방법을 권장합니다. 다른 요인으로 인해 선호되지 않는 한 LEFT JOIN
접근 방식을 피하세요. 특정 요구 사항과 데이터 세트 크기에 가장 적합한 방법을 선택하세요.
위 내용은 SQL Server의 INSERT INTO SELECT를 사용하여 데이터를 삽입할 때 중복을 효율적으로 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!