2011-11-15 24 views
0

的两个不同的表MySQL的比较两个不同的表具有不同的约束上

我有两个表与这些结构的MySQL比较:

表1

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

表2

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

FullContact表包含人员,并且联系可能包含相同的个人但是以一种奇怪的列结构回馈给我。

FullContact可能包含重复项,并且联系人没有重复项。

主要目标:我想查看联系人中有多少人在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是相同的,通过使用内部连接和约束作为接触的物品由三个字符串参数和一个日期参数组成。

问题: 我使select语句显示来自FullContact的项目和来自Contacted的项目的结果。结果包含FullContact列是唯一的,联系人值重复。

这是正确的查询运行?

谢谢

回答

0

您正在检查那里,名称,电子邮件或电话的三批重复。 因此,如果您使用同一封电子邮件有两个不同的名称,则会在结果中获得两条记录。我会预期和在条款。

+0

我在想,独特的声明将提供一个类似功能的分组。但是,我错误地写了这个语句,因为它只关心fc.name列。查询的一个问题是,我试图限制很多来检查我是否得到正确的输出。我将查询分成电子邮件支票,电话支票和姓名支票。之后,我可以手动检查所有比赛。这是我现在发现的最有效的方式。 – Alex

+0

分组将是一个额外的步骤。无论如何,可能会更容易理解为三位。 –