안녕하세요!
그동안 건강하셨지여? 오늘 여러분들이 보시게 될 쿼리는 중복데이타 삭제 방법 입니다. 아주 유용하게 사용될수 있습니다. 예를 들어 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 값이 되지요? 제가 간단하게 설명드렸는데, 어떠신지요??? 설명이 어렵진 않았나 모르겠네요.. 실제로 테스트를 해 보시기 바랍니다. 다음엔 좀더 실무적이구, 필요한 기능을 찾아서 다시 찾아 뵙도록 하겠습니다. 그때까지 건강하시길....
|
|||||||||||