그래서 중복 레코드 문제를 해결하기 위해 일부 스크립트를 실행하고 있습니다. 나는 얼마나 엄격한 일치가 요구되는지 단계별로이 작업을 수행하고 있습니다.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
이 쿼리는 다음과 같은 결과
(사과를 산출하지만 때문에 비밀에 나는 이미지 센서해야하지만, 당신은 4510을 person_id로 내 말을해야합니다 및 person_id (5035)는 동일한 이동 전화 번호를 갖는다)
이제 이러한 중복 레코드를 반입하는 실제 쿼리는 이전 쿼리의 결과 집합에서 해당 값을 가져옵니다. 이제 내가 휴대 전화 번호도 입력하십시오. 나는 0 개의 결과를 얻는다. (내가 이중 검사, 삼중 체크하고 quadribble 전화 번호가 실제로 그들이 VARCHAR 필드입니다 정확히 두 기록에 같은 주어진 것을 확인. 여기에 무슨 무슨
사람이 어떤 생각을 가지고?
some table details:
Engine: InnoDB
Row format: Compact
Table rows: 42,538
Coalation:" utf8_general_ci
예, 나는 바보처럼 느껴집니다. :) 대답은 정확합니다. 고마워! – Lars
문제 없습니다. 여분의 공간은 번거롭고 때때로 자리를 잡기가 어렵습니다. – Tom