데이터 중복 없이 테이블 간 행 복사
한 테이블에서 다른 테이블로 데이터를 전송할 때 중복 행이 삽입되지 않도록 하는 것이 중요합니다. 이를 달성하려면 기존 레코드를 필터링하는 방법이 필요합니다.
초기 접근 방식에서는 하위 쿼리와 함께 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!