복붙노트

[SQL] MySQL의 테이블에서 중복을 삭제하는 방법

SQL

MySQL의 테이블에서 중복을 삭제하는 방법

나는 클라이언트에게 어떤 중복 전화를 삭제하려면 다음 쿼리를 부여했습니다. MSSQL 데이터베이스에 기록하지만, 지금 그들은 또한 MySQL을 그것을 할 필요가 있고, 그들은 MySQL이 쿼리의 형식에 대해 불평을보고. 난 내 코드 샘플에 대한 중복과 테스트 테이블의 설정을 포함했지만, 실제 삭제 쿼리는 계산 것입니다.

나는 아직도 바쁜 다운로드를 나처럼, 무지와 긴급 성이 물어와 MySQL을 설치하고, 다만 어쩌면 누군가는 그 동안 도움이 될 수 있어요.

 create table bkPhone
 (
     phoneNo nvarchar(20),
     firstName nvarchar(20),
     lastName nvarchar(20)
 )
 GO

 insert bkPhone values('0783313780','Brady','Kelly')
 insert bkPhone values('0845319792','Mark','Smith')
 insert bkPhone values('0834976958','Bill','Jones')
 insert bkPhone values('0845319792','Mark','Smith')
 insert bkPhone values('0828329792','Mickey','Mouse')
 insert bkPhone values('0834976958','Bill','Jones')

 alter table bkPhone add phoneId int identity

 delete from bkPhone
 where phoneId not in
 (
     select min(phoneId)
     from bkPhone
     group by phoneNo,firstName,lastName
     having  count(*) >= 1
 )

해결법

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

    1.여러 가지 방법으로 로마로 통한다. 이것은 하나입니다. 그것은 매우 빠릅니다. 그래서 당신은 큰 데이터베이스를 사용할 수 있습니다. 굴절률들 잊지 마세요. 트릭은 다음과 같습니다 메이크업의 PHONENO 독특하고 사용 "무시".

    여러 가지 방법으로 로마로 통한다. 이것은 하나입니다. 그것은 매우 빠릅니다. 그래서 당신은 큰 데이터베이스를 사용할 수 있습니다. 굴절률들 잊지 마세요. 트릭은 다음과 같습니다 메이크업의 PHONENO 독특하고 사용 "무시".

    drop table if exists bkPhone_template;
    create table bkPhone_template (
             phoneNo varchar(20),
             firstName varchar(20),
             lastName varchar(20)
     );
    
    insert into bkPhone_template values('0783313780','Brady','Kelly');
     insert into bkPhone_template values('0845319792','Mark','Smith');
     insert into bkPhone_template values('0834976958','Bill','Jones');
     insert into bkPhone_template values('0845319792','Mark','Smith');
     insert into bkPhone_template values('0828329792','Mickey','Mouse');
     insert into bkPhone_template values('0834976958','Bill','Jones');
    
    drop table if exists bkPhone;
    create table bkPhone like bkPhone_template;
    alter table bkPhone add unique (phoneNo);
    
    insert  ignore into bkPhone (phoneNo,firstName,lastName) select phoneNo,firstName,lastName from bkPhone_template;
    
    drop table bkPhone_template;
    

    데이터 테이블이 이미 존재하는 경우에, 당신은 단지 만들 테이블 선택을 무시하기의 삽입과 선택 실행해야합니다. 끝에서 당신은 어떤 테이블의 이름을 변경 문을 실행해야합니다. 그게 다야.

    이 해결 방법은 훨씬 더 빨리 다음, 훨씬 삭제 작업입니다.

  2. ==============================

    2.당신은 고유의 것들에 의해 선택할 수 있습니다 :

    당신은 고유의 것들에 의해 선택할 수 있습니다 :

    select distinct(phoneNo) from bkPhone
    

    그리고, 다른 테이블에 넣어 이전 테이블을 삭제하고 이전 이름에 새 이름을 바꿉니다.

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

    3.그것은 아무 의미가 없기 때문에 MySQL은, 불평. 당신은 당신이 그룹에 의한 분 ()를 사용하여 열을 집계하려고합니다.

    그것은 아무 의미가 없기 때문에 MySQL은, 불평. 당신은 당신이 그룹에 의한 분 ()를 사용하여 열을 집계하려고합니다.

    당신 같은 사람에 대해 중복 전화 번호를 삭제하려는 경우 지금의 SQL은 다음과 같아야합니다

    delete from bkPhone
     where phoneId not in
     (
             select min(phoneId)
             from bkPhone
             group by firstName,lastName /* i.e. grouping by person and NOT grouping by phoneId */
             having  count(*) >= 1
     )
    
  4. ==============================

    4.MySQL의도 포함 :

    MySQL의도 포함 :

    http://mssql-to-postgresql.blogspot.com/2007/12/deleting-duplicates-in-postgresql-ms.html

  5. from https://stackoverflow.com/questions/672702/how-to-delete-duplicates-in-mysql-table by cc-by-sa and MIT license