2016-07-29 4 views
1

id을 제외한 모든 열에서 동일한 값을 가진 모든 행을 삭제하고자합니다. 가장 낮은 행은 id입니다. (- 가장 낮은 ID 1 떠나), 6, 7 (5 떠나는)을 삭제 여기가장 낮은 ID를 가진 mysql 만 중복 된 행을 제거하십시오.

id year file name language download 
1 2014 a x  h  d 
2 2014 a c  i  d 
3 2014 a x  h  d 
4 2014 a x  h  d 
5 2015 b y  j  d 
6 2015 b y  j  d 
7 2015 b y  j  d 

나는 3, 4 삭제할 :
이 데이터를 감안할 때.

"일치"는 두 행의 '연도', '파일', '이름', '언어'및 '다운로드'가 동일 함을 의미합니다.

중복 행이 10 개 이상일 수 있습니다. 모든 행을 삭제하지만 가장 낮은 ID 행을 유지하려고합니다.

+0

적어도 1 행 ??? – Strawberry

+0

예. 가장 낮은 가장 낮은 ID 행을 유지 – Jaki

+0

작동하지 않습니다 ... – Jaki

답변

1

사용에 MySQL의 멀티 테이블은 자체 조인과 구문을 삭제 : 그것은 본질적으로 하나의 가입 이후

delete b 
from mytable a, mytable b 
where b.year = a.year 
and b.file = a.file 
and b.name = a.name 
and b.language = a.language 
and b.download = a.download 
and b.id > a.id -- this condition picks the higher id(s) for deletion 

이, 아주 잘 수행해야합니다.

+0

그래, 그것은 나를 위해 일했습니다. 감사합니다 – Jaki

+0

나는 명령을 실행하지만, 많은 시간이 걸립니다. 나는 2 백만 줄 이상의 데이터베이스를 가지고있다. – Jaki

+0

@jaki ID가 아닌 열의 값이 가장 많은 값에 색인을 붙입니다. 서로 다른 값의 수가 약 100 개 미만인 경우 두 번째 열이 2 번째 열이 아닌 다른 열의 숫자가 두 번째가되는 두 열로 색인을 만듭니다. – Bohemian

1
DELETE 
    FROM myTable a 
WHERE EXISTS (SELECT b.id 
       FROM myTable b 
       WHERE a.year = b.year 
       AND a.file = b.file 
       AND a.name = b.name 
       AND a.language = b.language 
       AND a.download = b.download 
       AND a.id > b.id); 
관련 문제