【发布时间】:2021-01-17 20:13:04
【问题描述】:
我正在尝试在包含购买数据的新表和我的历史数据库之间创建一个查找列,每个客户的主 ID 都不同。 主要问题是一些客户在历史数据库中没有电子邮件地址,但他们在我们的新系统中总是有一个。 语言是 mySQL
这是表格:
对于新数据库 - 我们称之为 new_data
对于旧数据库 - 我们称之为 old_data
我想得到什么(对不起,我忘了格式化日期)
我尝试了两种方法:
- 进行两次连接,首先在电子邮件字段上,然后在名称上。主要问题是,即使我输入了不同的值,我也会得到大量重复的值。
select distinct *
from new_data as n
left join old_data as c
on c.email = n.email
left join old_data as d
on d.name= n.c_name
- 使用条件跨多个字段进行连接,我得到了更多的行返回
select distinct * from
new_data n
left join old_data c
on c.email = n.email or c.name= n.name
【问题讨论】:
-
我看到严格的
Name匹配 - 为什么您还尝试通过email加入?也许您的样本数据不充分?展开...并将其显示为格式化文本,而不是图片。 -
因为有些人可能在我的数据库中有相同的名字,所以我想先交叉检查电子邮件。大约 10% 的样本数据在旧数据库中丢失了电子邮件。
-
如果是这样,则替换数据样本并发布代表性样本。它必须显示在查询创建期间必须考虑的所有可能组合。
-
email列是否定义为 UNIQUE?它不能包含重复项吗?同一封邮件的名称在新旧表中是否可能不同? -
DISTINCT *是矛盾的。如需更多帮助,请参阅meta.stackoverflow.com/questions/333952/…
标签: mysql database join merge snowflake-cloud-data-platform