2014-05-22 2 views
0

내가 MySQL의 테이블 '사람'이 있습니다MySQL의 테이블에서 중복 행을 (문자 및 공백을 무시)를 제거

약 1,000 행
id[byte], name [varchar], surname [varchar], size [int] 

, 그들 대부분은 예를

  • Xbyte1X에 대한 중복이 있고, '마이크', '앤더스', 5
  • Xbyte2X, '마이크', '앤더스', 5

또는

  • Xbyte1X, '', '', 0;
  • Xbyte2X, '', '', 0;

내가 중복을 삭제하고 싶지만, 내가 처리해야 : - 트림 - 큰/낮은 문자 - 널 (null)/빈 기록을 내가 삭제 된 행의 'OID'rememeber해야

, 왜냐하면 나는 다른 테이블 (그것 관계형 모델)에서 대체해야 내 테이블 '사람'을 수정하고 중복을 제거 할 수있는 절차를 만드는 방법?

전략 :

그냥 샘플 테이블의

PS, 실제 테이블이 몇 가지 더 열과 우리는 방법 울부 짖는 소리 ETL 과정에서 비슷한 문제를 해결

답변

1

훨씬 더 많은 데이터

와의
  • 사람 테이블 IsDuplicateNewID에 새 열을 두 개 이상 추가하거나 사람 테이블 데이터에서 새 테이블을 만든 다음 을 추가하십시오 새 열).
  • 중복 레코드를 검색하는 절차를 실행하고 IsDuplicatetrue으로 업데이트하고 NewId 열을 ID 레코드로 채 웁니다.
  • 중복 된 행의 NewId로 IsDuplicate = true으로 표시된 사람 테이블의 레코드로 끝나게됩니다. 이제이 레코드와 관련된 테이블의 데이터를 찾고 newId 값으로 관계를 업데이트 할 수 있습니다.
  • 이제 사람 테이블에서 중복 데이터를 제거 할 때 테이블의 백업을 유지하는 것이 좋습니다 ( ).

중복 된 데이터를 찾기 :
찾기가 데이터 중복 세트의 레코드를 제거 할 필요가 선택한만큼 힘들 것입니다 중복,이 뜻이 애플리케이션 사업에 따라, 샘플 오래된 선택 될 수있다 id.
중복 된 수식을 사용하면 다음과 같은 표준 이름을 만들 수 있습니다. CONCAT(Upper(Trim(Replace(people.name,' ',''))) ,Upper(Trim(Replace(people.surname' ',''))))

희망이 있습니다.

+0

예. 그런 단계에는 전략이 필요합니다.나는 그것을 수정하고 새로운 컬럼을 만들지 않고 그것을 사용한다. 그러나 더 많은 메모리와 시간이 필요하다. – boski

관련 문제