MySQL에서 쿼리문으로 중복된 데이터를 삭제하고 싶은 경우가 있습니다. 이럴 때는 간단한 쿼리문으로 중복 데이터 중 하나만 남기고 나머지 데이터를 지울 수 있습니다.
주의 : 많은 데이터가 쌓인 테이블에서는 속도가 저하될 수 있습니다. 만일의 사태에 대비하여 데이터베이스를 미리 백업해주시기 바랍니다.
쿼리문 테스트를 위해 다음과 같은 test라는 이름의 테이블이 있다고 가정해보겠습니다.
이제 중복된 데이터를 삭제해보겠습니다. 다음과 같이 쿼리를 구성합니다.
DELETE a FROM [테이블명] a, [테이블명] b WHERE a.[ID값을 가진 컬럼명] > b.[ID값을 가진 컬럼명] AND a.[중복값을 비교할 컬럼명] = b.[중복값을 비교할 컬럼명];
테이블 a와 b는 모두 같은 테이블이어야 하며 나중에 들어온 데이터인지의 여부 확인을 위하여 자동 증가(AUTO_INCREMENT
)하는 숫자 데이터가 담긴 ID 컬럼을 사용합니다. 또한 중복값이 들어있는 컬럼을 하나만 지정해주어야 합니다.
위 테스트 테이블의 내용대로 쿼리를 작성하면 다음과 같이 될 것입니다. 이를 실행하면 작은 값의 ID를 유지한 채 나머지 중복된 데이터가 삭제될 것입니다.
DELETE a FROM test a, test b WHERE a.testID > b.testID AND a.testValue = b.testValue;
만약, 반대로 큰 값의 ID를 유지한 채 나머지 데이터를 지우고 싶다면 아래와 같이 부등호만 바꾸어주시면 됩니다.
DELETE a FROM test a, test b WHERE a.testID < b.testID AND a.testValue = b.testValue;
위 쿼리의 실행 결과는 다음과 같을 것입니다.
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…