2011-06-10 3 views
1

두 개의 테이블 인 client 및 eventAttendance가있는 Access 데이터베이스가 있습니다. 클라이언트는 클라이언트가 처음 등록 할 때 데이터를 저장합니다. EventAttendance에는 이벤트 ID 인 clientID와 클라이언트가 이벤트에 참석 한 날짜가 포함됩니다. 클라이언트 테이블에 중복 레코드가 있습니다. 많은 클라이언트에는 여러 개의 clientID가 있습니다. 이 clientID는 이벤트를 등록하는 데 사용되므로 동일한 개별 클라이언트가 8 개의 서로 다른 clientID로 8 개의 서로 다른 이벤트에 대해 등록 할 수 있습니다.중복 클라이언트 레코드의 데이터 병합

클라이언트 테이블의 클라이언트가 여러 개의 clientID로 식별되었지만 이제는 eventAttendance 테이블의 레코드를 병합하는 방법이 불확실합니다. 아무도 내가이 상황을 처리해야하는 방법을 권할 수 있습니까?

표 클라이언트

ClientID Name Email 
1   Jack [email protected] 
2   Jill [email protected] 
3   Jack [email protected] 

표 EventAttendance

EventID ClientID AttendanceDate 
1   1   6/1/2000 
1   3   6/1/2001 

답변

1
먼저 떨어져, 나는 몇 년은 MS-Access에서 제거하고 있습니다

, 그래서 난 내 SQL을 유지하려고합니다 일반적인. 이 목적 코드는 속임수 클라이언트를 제거하는 목표를 달성하기위한 단계를 전달하는 것입니다.

1 단계, 중복 된 클라이언트 기록

유일한 트릭은 여기에 모든 클라이언트를 그룹화, 가장 낮은를 결정하기 위해 MIN 집계 함수를 사용하는의 최소 된 ClientID에 맞게 이벤트 출석 테이블의 클라이언트 ID의 업데이트 클라이언트 당 클라이언트 ID.

UPDATE EventAttendance set ClientID = C2.ClientID 
FROM 
    EventAttendance as E 
    INNER JOIN Clients as C1 on C1.ClientID = E.ClientID 
    -- Re-Join with Clients to obtain the Minimum ClientID per Client 
    INNER JOIN (Select Min(ClientID) as MinClientID FROM Clients GROUP BY ClientName) as C2 on C1.ClientName = C2.ClientName 

2 단계,

1 단계 클라이언트를 속는에 대한 참조를 지워 각 클라이언트의 첫 번째 클라이언트 기록하지만, 모두 삭제, 그래서 우리는 속는을 삭제 무료입니다.

DELETE FROM Clients 
WHERE ClientID not in 
    -- If the current record's ClientID is not in the following, then it is a dupe that is OK to be deleted 
    (Select Min(ClientID) as MinClientID FROM Clients GROUP BY ClientName) 

노트

  • 은 위의 CLIENTNAME은 사람마다 고유 한 가정합니다. 이것이 좋은 분야가 아니라면 전자 메일 주소 또는 고유성을 확립하기 위해 여러 레코드의 연결을 시도해보십시오.
  • 는, 클라이언트의 이름 또는 이메일 주소로 add a uniqueness constraint (선호) 열에게 데이터를 수정 한 후
1

는 일치하지 않는 데이터의 문제 같은데.

EventAttendance 테이블에 매핑하여 1-m 관계로 만들 수있는 클라이언트의 고유 ID가 있어야합니다. clientid에서 중복 레코드 사이의 유사성을 확인 했으므로 고유 ID를 만드는 것은 문제가되지 않습니다. 클라이언트 테이블에 새 열을 만들고 동일한 클라이언트에 대한 각 중복 클라이언트 레코드에 고유 번호를 할당하십시오. 이제 EventAttendance 테이블 clientId 열을 새 ID로 업데이트 할 수있는 업데이트 문을 작성해야합니다. 이것은 그것을하는 한 방법입니다.

한번 업데이트 한 후에는 첫 번째 클라이언트를 제외한 클라이언트의 중복 레코드를 제거하고 고유 ID를 할당 한 다음 고유 한 ID 열을 삭제하여 한 클라이언트를 식별하고 EventAttendance 테이블에서이를 외래 키로 참조 할 수 있습니다.

하지만 이메일 주소로 중복 ID를 만드는 클라이언트를 제한하고 싶습니다.

+0

전자 메일 주소가 후보 키라는 가정이 정확하지 않습니다. 회의 등록 데이터를 사용하는 것과 같은 상황에 해당하는 프로젝트가 있는데 많은 기업이 여러 등록자에게 단일 이메일 주소를 제공합니다. 그리고 개인은 다른 이벤트에 대해 다른 이메일 주소로 등록 할 수 있습니다. 하지만 물론 특정 응용 프로그램의 비즈니스 규칙에 따라 다릅니다. –