>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 INSERT INTO SELECT를 사용할 때 중복 항목을 방지하려면 어떻게 해야 합니까?

SQL Server에서 INSERT INTO SELECT를 사용할 때 중복 항목을 방지하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-13 11:59:55992검색

How Can I Prevent Duplicate Entries When Using INSERT INTO SELECT in SQL Server?

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 INLEFT JOIN

보다 효율적인 방법은 삽입하기 전에 NOT EXISTS, NOT INLEFT JOIN을 활용하여 Table2에 있는 기존 데이터를 필터링하는 것입니다.

1. NOT EXISTS 사용:

이 접근 방식은 삽입하기 전에 Table1Table2에 있는 각 행이 있는지 확인합니다.

<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 JOINTable1에서 일치 항목이 없는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.