【问题标题】:MySQL compare two different tables with different contraintsMySQL比较具有不同约束的两个不同表
【发布时间】:2011-11-15 01:03:28
【问题描述】:

MySQl 两个不同表的比较

我有两个具有这些结构的表:

表 1

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

表 2

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

FullContact 表包含人员,而 Contacted 可能包含相同的个人,但以奇怪的列结构返回给我。

FullContact 可能包含重复项,而 Contacted 没有重复项。

主要目标:我想看看有多少来自 Contacted 的人在 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 中与 Contacted 相同的项目。

问题: 我做了选择语句来显示来自 FullContact 的项目和来自 Contacted 的项目的结果。结果包含唯一的 FullContact 列和重复的联系人值。

这是要运行的正确查询吗?

谢谢

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您正在检查其中的三个重复项,即姓名、电子邮件或电话。 因此,如果您在同一封电子邮件中有两个不同的姓名,您会在结果中获得两条记录。我会期待并在 on 子句中。

    【讨论】:

    • 我在想不同的声明将提供类似分组的功能。但是,我写错了语句,因为它只关心 fc.name 列。查询的一个问题是我试图限制太多以检查我是否得到正确的输出。我将查询拆分为电子邮件检查、电话检查和姓名检查。之后我可以手动检查所有匹配项。这是我目前找到的最有效的方法。
    • 分组将是一个额外的步骤。无论如何,分成三个部分可能更容易理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2021-06-16
    • 2019-04-24
    • 2017-03-03
    相关资源
    最近更新 更多