> 데이터 베이스 > MySQL 튜토리얼 > SQL Server의 INSERT INTO SELECT를 사용하여 데이터를 삽입할 때 중복을 효율적으로 방지하는 방법은 무엇입니까?

SQL Server의 INSERT INTO SELECT를 사용하여 데이터를 삽입할 때 중복을 효율적으로 방지하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-13 10:22:42
원래의
155명이 탐색했습니다.

How to Efficiently Avoid Duplicates When Inserting Data Using SQL Server's INSERT INTO SELECT?

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 SELECTID(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>
로그인 후 복사

Table1ID이 없는 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 JOINIS 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는 일치하지 않는 행을 식별합니다. NULLTable2.id 값이 있는 것만 삽입됩니다.

특히 대규모 데이터 세트의 경우 최적의 성능을 위해서는 NOT EXISTS 방법을 권장합니다. 다른 요인으로 인해 선호되지 않는 한 LEFT JOIN 접근 방식을 피하세요. 특정 요구 사항과 데이터 세트 크기에 가장 적합한 방법을 선택하세요.

위 내용은 SQL Server의 INSERT INTO SELECT를 사용하여 데이터를 삽입할 때 중복을 효율적으로 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿