2014-01-28 3 views
0

나는 같은 필드의 모든 중복 레코드를 삭제할 MySQL은

enter image description here

이하와 같은 구조의 테이블이 중복 그룹화 열이 기록을 삭제 필드는 BUY_ITEMALSO_BUY입니다. .

는 RULE_ID 번호 2 및 7 모두 위 그림에서 예로서,831 CD-ROM 및MOUSE을 갖는다BUY_ITEMBUY_ALSO.

그래서 내가 RULE_ID = 2와 첫 번째 기록을 유지하고, 그 결과이

enter image description here

같은 것 RULE_ID = 7

와 두 번째 레코드를 삭제하려면 을 사용하여 중복 된 레코드를 필터링하고 여기에 쿼리가 있습니다.

select distinct BUY_ITEM, ALSO_BUY from result 

enter image description here

처럼 될하지만 난 쿼리를 기준으로 그룹화 열 (BUY_ITEM 및 ALSO_BUY)와 중복 레코드를 삭제 해야할지 모르겠있어 ..

수 있었다 어떻게하는지 말해줘요?

덕분에 MySQL의에서

답변

1

하기 전에, 당신은 delete 명령에 join을 사용할 수 있습니다. 그래서, 당신은 당신이 필요로하는 데이터를 요약 할 수 있습니다 :

delete t 
    from table t join 
     (select buy_item, also_buy, min(rule_id) as minid 
      from table t 
      group by buy_item, also_buy 
      having count(*) > 1 
     ) ba 
     on t.buy_item = ba.buy_item and t.also_buy = ba.also_buy 
    where rule_id > minid; 
+0

답장에 대한 .. 질문은 여전히 ​​오류입니다, 나는 그것을 고치려고했지만 그것을하지 않습니다 .. 오류가 있습니다. '테이블 t 조인에서 t 지우기'.. 오류 메시지는 ** 테이블 t가 정의되지 않았습니다 **. 이 질의를 실행한다면 값이 ** RULE_ID이고 값이 ** ** ** 삭제 된'RULE_ID' 값이 ** 대신 ** 유지됩니다. –

+0

@SoniGunz. . . 쿼리는 SQL Fiddle (http://www.sqlfiddle.com/#!2/b7459)에서 작동합니다. 처음에'select'를 사용하여 쿼리를 실행하면 삭제 될 내용을 볼 수 있습니다. –

+0

실제로 작동했습니다! 내가 t.also_buy와't.buy_item'을 잘못 입력했다 .. 오류가 있다면 .. .. 대단히 감사합니다. .. :) –