집 >데이터 베이스 >MySQL 튜토리얼 >중복 항목을 방지하면서 테이블 간에 행을 복사하려면 어떻게 해야 합니까?
중복을 무시하면서 테이블 간 행 복사
여러 테이블로 작업할 때 테이블 사이에 행을 복사해야 하는 경우가 많습니다. 그러나 중복 행 삽입을 방지하는 것이 중요합니다. 다음 토론에서는 이 작업을 구현할 때 발생하는 사용자 문제를 다룹니다.
처음에 사용자는 중복되지 않은 행을 식별하기 위해 하위 쿼리와 함께 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.) )
또는 더 큰 간결성을 위해 외부 조인을 사용할 수 있습니다.
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
이러한 접근 방식은 대상에서 중복 행 문제를 해결합니다. 테이블. 그러나 원본 테이블 내의 중복 행이 문제인 경우 다음 쿼리를 사용할 수 있습니다.
INSERT INTO destTable SELECT Distinct field1,field2,field3,... FROM srcTable
마지막으로 *에 의존하기보다는 INSERT 문의 필드를 명시적으로 나열하는 것이 좋습니다. 데이터 무결성을 보장하는 와일드카드.
위 내용은 중복 항목을 방지하면서 테이블 간에 행을 복사하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!