> 데이터 베이스 > MySQL 튜토리얼 > 중복을 만들지 않고 테이블 간에 행을 복사하는 방법은 무엇입니까?

중복을 만들지 않고 테이블 간에 행을 복사하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-27 05:14:13
원래의
588명이 탐색했습니다.

How to Copy Rows Between Tables Without Creating Duplicates?

데이터 중복 없이 테이블 간 행 복사

한 테이블에서 다른 테이블로 데이터를 전송할 때 중복 행이 삽입되지 않도록 하는 것이 중요합니다. 이를 달성하려면 기존 레코드를 필터링하는 방법이 필요합니다.

초기 접근 방식에서는 하위 쿼리와 함께 WHERE 절을 사용하여 고유한 행을 식별하려고 했습니다. 그러나 하위 쿼리에는 중복 여부를 판단하는 기준이 부족했습니다.

WHERE 필터링과 함께 하위 쿼리를 사용하는 솔루션

중복 쿼리를 효과적으로 필터링하려면 다음과 같이 하위 쿼리를 수정하면 됩니다.

INSERT INTO destTable
SELECT Field1,Field2,Field3,... 
FROM srcTable
WHERE NOT EXISTS(SELECT * 
                 FROM destTable 
                 WHERE (srcTable.Field1=destTable.Field1 and
                       SrcTable.Field2=DestTable.Field2...etc.)
                 )
로그인 후 복사

이 업데이트된 하위 쿼리는 원본 테이블과 대상 테이블 간의 특정 필드를 비교하는 조건을 추가합니다. 중복이 존재하는지 확인합니다.

외부 조인을 사용한 솔루션

또는 외부 조인을 사용하여 동일한 결과를 얻을 수도 있습니다. 외부 조인은 한 테이블에서 모든 행을 검색하고 다른 테이블에서 일치하는 행을 검색하여 일치하지 않는 행을 NULL로 남겨둡니다.

INSERT INTO destTable
SELECT s.field1,s.field2,s.field3,... 
FROM srcTable s 
       LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...)
WHERE d.Key1 IS NULL
로그인 후 복사

이 경우 외부 조인은 키 필드(Key1, Key2, 등.). 대상 테이블의 어떤 행과도 일치하지 않는 원본 테이블의 행은 키 필드에 대해 NULL 값을 가지며 이러한 행은 대상 테이블에 삽입됩니다.

추가 고려 사항

소스 테이블의 중복 방지에만 관심이 있는 경우 SELECT에서 고유 키워드를 사용할 수 있습니다. 명령문:

INSERT INTO destTable
SELECT Distinct field1,field2,field3,... 
FROM srcTable  
로그인 후 복사

마지막으로 SELECT *를 사용하는 대신 INSERT 문에 특정 필드를 지정하는 것이 성능상의 이유로 권장됩니다.

위 내용은 중복을 만들지 않고 테이블 간에 행을 복사하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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