안규 공부방

MS-SQL > SubQuery - 중복 데이타 검사 및 삭제 방법

등록일 : 2017-07-03 19:11 조회수 : 93,021

안녕하세요!
그동안 건강하셨지여?

오늘 여러분들이 보시게 될 쿼리는 중복데이타 삭제 방법 입니다.
아주 유용하게 사용될수 있습니다.

예를 들어 member 라는 테이블에 board_idx(인덱스) 값과 email 이라는 필드를 가지고 있습니다.

여러분이 만약 회원중에 email 이 중복될수 있다는 생각에 email을 중복이 있는지 없는지
검사를 해 보고 싶습니다.

어떤 쿼리를 날리면 될까요?

select count(email),email from member group by email

위와 같은 쿼리를 날리면 됩니다.

email 를 group by 를 한다음, count(email) 하면,,, email 과 중복된 email 갯수가 나오겠지요?

그렇다면 여기에서 중복된 데이타만 삭제하고 싶다면 어떻게 하면 될까요?


그럼 쿼리를 보도록 하겠습니다.

delete member where board_idx not in (select min(b.board_idx) from member B group by b.email)

위와 같은 쿼리를 날리면 된답니다.

일단
(select min(b.board_idx) from member B group by b.email)
이 쿼리는 email 를 group by 로 묶은 다음에 가장 작은 board_idx 값을 구하게 됩니다.

그렇다면 중복된 데이타일 경우 가장 작은 board_idx 값만 출력을 하겠지요?

여기까지 이해 가시나요??

맞습니다.

즉, 위 쿼리를 날려서 나온 결과값 board_idx 에 포함이 되지 않은 데이타를 모두 삭제한다면???

그게 바로 중복된 나머지 데이타 겠지요??

그렇경우, board_idx not in 조건문을 써주면 됩니다. 즉, 포함되지 않는 board_idx 값이 되지요?

제가 간단하게 설명드렸는데, 어떠신지요???

설명이 어렵진 않았나 모르겠네요..

실제로 테스트를 해 보시기 바랍니다.

다음엔 좀더 실무적이구, 필요한 기능을 찾아서 다시 찾아 뵙도록 하겠습니다.
그때까지 건강하시길....
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.