2014-11-07 2 views
0

그래서 중복 레코드 문제를 해결하기 위해 일부 스크립트를 실행하고 있습니다. 나는 얼마나 엄격한 일치가 요구되는지 단계별로이 작업을 수행하고 있습니다.mysql 레코드가 쿼리에서 선택되지 않았습니다.

내가 알아챈 것은 내가 식별 할 수있는 것보다 적은 레코드를 결합하고 있다는 것이 었습니다.

내가 중복 레코드를 식별하는 데 사용되는 스크립트는

SELECT p.firstname, p.surname, p.email, REPLACE(p.mobile, ' ', ''), count(*) as `duplicates` 
FROM person p 
WHERE (p.firstname!='' and p.firstname != '?' and p.firstname != '*') 
AND (p.surname!='' and p.surname != '?' and p.surname != '*') 
AND (p.email != 'xxxxx' OR p.mobile != 'xxxxx') 
GROUP BY p.firstname, p.surname, p.email, p.mobile 
HAVING COUNT(*) > 1; 

그래서 이것은 정확히 일치하는 첫 번째 이름, 성을 위해 발견되는 중복 레코드 하더군요을 따라하고로 이메일이나 이동 중 및 번호.

그런 다음 각각을 반복하고 레코드를 결합한 다음 이전 레코드를 제거하십시오.

나는 이걸 훑어봤을 때, 나는 여전히 중복 된 숫자가 남아 있다는 것을 알아 차렸다. 그래서 나는 이것들 중 일부를 선택하려고 시도했다.

SELECT p.person_id, p.firstname, p.surname, p.email, REPLACE(p.mobile, ' ', '') `p.mobile` 
FROM person p 
WHERE p.firstname='Ross' AND p.surname='Allen' and p.email='xxxxx' 
ORDER BY p.person_id 

이 쿼리는 다음과 같은 결과

xxxxx

(사과를 산출하지만 때문에 비밀에 나는 이미지 센서해야하지만, 당신은 4510을 person_id로 내 말을해야합니다 및 person_id (5035)는 동일한 이동 전화 번호를 갖는다)

이제 이러한 중복 레코드를 반입하는 실제 쿼리는 이전 쿼리의 결과 집합에서 해당 값을 가져옵니다. 이제 내가 휴대 전화 번호도 입력하십시오. 나는 0 개의 결과를 얻는다. (내가 이중 검사, 삼중 체크하고 quadribble 전화 번호가 실제로 그들이 VARCHAR 필드입니다 정확히 두 기록에 같은 주어진 것을 확인. 여기에 무슨 무슨

enter image description here

사람이 어떤 생각을 가지고?

some table details: 
Engine: InnoDB 
Row format: Compact 
Table rows: 42,538 
Coalation:" utf8_general_ci 

답변

1

은 아마도 휴대 전화 번호는 선행 또는 후행 공간이 쿼리는 중복을 식별, 당신이 휴대 전화 번호에서 공백을 제거 당신은 변경을 시도 할 수 귀하의 곳으로 절 :..

WHERE p.firstname = 'Ross' AND p.surname = 'Allen' AND p.email = 'xxxxx' 
     AND REPLACE(p.mobile, ' ', '') = '[MOBILENUMBER]' 
+0

예, 나는 바보처럼 느껴집니다. :) 대답은 정확합니다. 고마워! – Lars

+0

문제 없습니다. 여분의 공간은 번거롭고 때때로 자리를 잡기가 어렵습니다. – Tom

관련 문제