[MySQL] 중복 확인 및 중복 제거 query
#mysql
2023-12-10
[MySQL] 중복 확인 및 중복 제거 query

sql을 작성하다 보면 데이터의 중복이 보이고 꼭 이걸 제거해야하는 상황이 생긴다.

같은 테이블에서 중복된 데이터가 있을 경우 중복을 확인하고 제거하는 쿼리를 생각보다 많이 필요로 하게 되는데, 나는 3개의 컬럼을 기준으로 중복을 확인하고 가장 최근 값만 남겨야 하는 상황이 있었다.

#인덱스란?

데이터를 빨리 찾기 위해 특정 컬럼을 기준으로 정리해놓은 표

중복이 있는지 확인하는 쿼리는 간단하다. 단순히 총 카운트가 1이 넘는 지만 보면 된다.

### [컬럼 중복 값 삭제 query]

DELETE A FROM 테이블명 A
INNER JOIN (
  SELECT 컬럼1, 컬럼2, 컬럼3, MAX(idx) as max_id
  FROM 테이블명
  GROUP BY 컬럼1, 컬럼2, 컬럼3,
) 테이블명 B
ON A.컬럼1 = B.컬럼1
AND A.컬럼2 = B.컬럼2
AND A.컬럼3 = B.컬럼3
AND A.idx < B.max_id;

A.idx < B.max_id 를 통해 가장 최근 값만 남길 수 있게 됨 (과거의 것은 전부 삭제)

Copyright © 2024 Joowon Hyun