MySQL2021. 3. 31. 09:58
728x90
반응형
SMALL

 

 

 

쿼리문으로 중복된 데이터에서 한개만 남기고 삭제하고 싶은 경우가 있다.

이때는 쿼리문으로 적용할 수 있는데,

많은 데이터가 쌓여있는 테이블일수록 조인 속도가 현저히 느려지기 때문에 데이터 양이 많이 않은

경우에만 추천한다.

물론 삭제하기 전에 백업해야하는것도 잊지말것~

테이블 A, B는 동일한 테이블이다.

 

 

 

SQL>
DELETE A FROM [테이블명] A, [테이블명] B
WHERE A.ID > B.ID
  AND A.[중복값비교컬럼] = B.[중복값비교컬럼];

 

 

 

반드시 이 목적을 가진 쿼리에서 테이블 A와 B는 동일해야하며, 내가 사용한 쿼리에서는 ID 값이

AUTO_INCREMENT인, 차례로 쌓이는 시퀀스인경우에 의도한대로 동작한다.

또한, 중복값이 들어있는 컬럼도 하나만 지정해주어야한다.

위의 쿼리는 작은 값의 ID를 유지하고(예전에 넣은 데이터를 남겨두고) 나머지를 지우는 쿼리인데,

반대로 큰 값의 ID를 유지하고(최근에 넣은 데이터를 남겨두고) 나머지를 지우고 싶다면 부등호만 반대로

A.ID < B.ID로 변경해주면 된다.

주의할것은, 정말로 데이터가 많아지면 조인된 쿼리 속도가 매~우 느려지니 적은 양의 데이터..

(10000건 이내..정도?)에만 사용하는게 좋다.

 

 

 

 

 

 

728x90
반응형
LIST
Posted by 사슴영혼'-'