2011-11-15 5 views
0

MySQL의 비교 :MySQL은 다른 제약 조건으로 두 개의 서로 다른 테이블을 비교 두 개의 다른 테이블</p> <p>나는 이러한 구조를 가진 두 개의 테이블이의

표 1

FullContact 
----------- 
id 
name 
phone 
address 
email 
phone 
registration 
marketingId 
created 

표 2

Contacted 
----------- 
first_name 
last_name 
email 

FullContact 테이블에 사람이 있고 Contacted에 동일한 개인이 포함되어있을 수 있습니다. 그러나 이상한 기둥 구조로 나에게 돌아온다.

FullContact에 중복이있을 수 있으며 Contacted에 중복 된 항목이 없을 수 있습니다.

주 목표 : ContactContact에서 얼마나 많은 사람들이 FullContact에 있는지보고 싶습니다. 쿼리의

SELECT distinct fc.name, fc.email, fc.phone, concat_ws(" ",c.first_name, c.last_name), 
c.phone from Contacted c 
INNER JOIN FullContact fc 
ON (concat_ws(" ", c.first_name, 
c.last_name) = fc.name or c.email = fc.email or (fc.phone REGEXP '[0-9]+$') = c.phone) 
and fc.created >= '2011-11-01'; 

설명 :

내가 실행하려고 쿼리는이 양식입니다 나는 내부 조인 사용 제약에 의해 접촉과 동일 FullContact에서 항목을 선택하는 것을 시도하고있다 세 개의 문자열 매개 변수와 날짜 매개 변수로

문제점 : FullContact의 항목 및 Contacted의 항목을 표시하기 위해 select 문을 작성했습니다. 결과에는 FullContact 열이 고유하고 Contact 값이 복제됩니다.

올바른 쿼리입니까?

감사합니다.

답변

0

거기에 중복되는 3 개의 로트, 이름, 이메일 또는 전화가 있는지 확인하고 있습니다. 동일한 전자 메일에 두 개의 다른 이름이 있으면 결과에 두 개의 레코드가 생깁니다. 나는 on 절에서 기대했을 것이다.

+0

나는 별개의 문장이 기능과 같은 그룹화를 제공 할 것이라고 생각했다. 그러나 fc.name 열에 대해서만 신경을 쓰므로 문을 잘못 작성했습니다. 쿼리에 대한 한 가지 문제는 올바른 출력을 얻고 있는지 확인하기 위해 많은 노력을 기울여야한다는 것입니다. 나는 질의를 이메일 확인, 전화 확인 및 이름 확인으로 나눴다. 이후 나는 모든 경기를 수동으로 확인할 수 있습니다. 이것이 내가 지금 발견 한 가장 효율적인 방법이었습니다. – Alex

+0

그룹화는 추가 단계입니다. 아마도 어쨌든 세 비트로 나누어 이해하기 쉬울 것입니다. –

관련 문제