복붙노트

[SQL] MySQL의 중복 된 행 (중복 2 열을 사용하여 검출)

SQL

MySQL의 중복 된 행 (중복 2 열을 사용하여 검출)

방법이 설정에서 중복 제거하려면?

id    A       B 
----------------
1     apple   2  
2     orange  1       
3     apple   2   
4     apple   1 

여기에서 나는 두 번 발생하는 (2 사과를) 제거 할. ID 번호는 고유합니다. 이 아니었다면 나는 DISTINCT 키워드를 사용합니다. 나는 어떤 방법 열 A와 B의 핵심을 만든 다음 내가 원하는 것을 얻을 그에서 DISTINCT 키워드를 사용할 수 있습니까? 귀하의 답변에 대한 많은 감사합니다.

해결법

  1. ==============================

    1.

    delete from myTable 
    where id not in
    (select min(id)
    from myTable
    group by A, B)
    

    즉, 브래킷의 선택은 A와 B 각각에 대한 그룹화 제 ID를 반환한다; 이 세트에 있지 않은 모든 ID를 삭제하면 처음 발생하는 "이후"는 A이다 플러스 B 조합의 모든 발행 수를 제거한다.

    편집 : 참조 버그 리포트 :이 구문이 문제가 될 것 같습니다 :

    http://bugs.mysql.com/bug.php?id=5037

    가능한 해결 방법은이 작업을 수행하는 것입니다 :

    delete from myTable 
    where id not in
    (
          select minid from 
          (select min(id) as minid from myTable group by A, B) as newtable
    ) 
    
  2. ==============================

    2.또 다른 (http://labs.creativecommons.org/2010/01/12/removing-duplicate-rows-in-mysql/에서). 삭제 한 후 고유 인덱스를 추가합니다

    또 다른 (http://labs.creativecommons.org/2010/01/12/removing-duplicate-rows-in-mysql/에서). 삭제 한 후 고유 인덱스를 추가합니다

    ALTER IGNORE TABLE mytable ADD UNIQUE INDEX tmpindex (A,B);
    ALTER TABLE mytable DROP INDEX tmpindex;
    

    는 키워드가 UNIQUE 그냥 실패 대신 키워드 위반하는 행을 드롭하게 MySQL의 확장 기능입니다 무시합니다.

  3. ==============================

    3.

    DELETE FROM fruit_table FT1
    WHERE EXISTS
    (
        SELECT * FROM fruit_table FT2 
        WHERE FT2.fruit_name_column = FT1.fruit_name_column
        AND   FT2.fruit_integer_column = FT1.fruit_integer_column
        AND   FT2.id <> FT1.id
    )
    

    이것은 당신이 제거되는 중복 레코드의 어떤 상관 없어 가정합니다.

  4. ==============================

    4.

    DELETE
    FROM mytable
    USING mytable, mytable AS vtable
    WHERE vtable.id > mytable.id
    AND mytable.A = vtable.A
    AND mytable.A = vtable.A
    
  5. ==============================

    5.당신은 당신이 원하는 데이터를 임시 테이블을 사용할 수 있습니다 :

    당신은 당신이 원하는 데이터를 임시 테이블을 사용할 수 있습니다 :

    insert into temp_table
    select min(id), A, B
     group by A, B
    
  6. ==============================

    6.나는 정확히 당신이 여기 요구하는지 모르겠어요. 당신이 A와 B 컬럼의 중복을하지 않으려면, 다음 SELECT DISTINCT A, XXX FROM B를 언급 단지 무엇. 어쩌면 당신은 당신이보고 싶습니다 결과의 유형의 예를 게시 할 수 있습니다.

    나는 정확히 당신이 여기 요구하는지 모르겠어요. 당신이 A와 B 컬럼의 중복을하지 않으려면, 다음 SELECT DISTINCT A, XXX FROM B를 언급 단지 무엇. 어쩌면 당신은 당신이보고 싶습니다 결과의 유형의 예를 게시 할 수 있습니다.

  7. from https://stackoverflow.com/questions/1799518/mysql-duplicate-rows-duplicate-detected-using-2-columns by cc-by-sa and MIT license