如何解决SQL 连接中的案例在第一次成功匹配时不会停止
我目前正在使用一个 B2B 销售数据库,该数据库没有针对每个客户的唯一标识符。新记录在加载时会分配一个 ID 代码,但由于各种原因,一个人可以拥有多个 ID 代码。
该企业会定期举办活动以获取注册数据。我正在尝试将事件数据(数据库加载前)与现有联系人表相匹配。这被证明是具有挑战性的,因为没有什么是唯一的(甚至不是电子邮件地址,因为它们可以与联系人主表中的多个记录共享或关联)。
我需要运行一些代码来标记数据库中已经存在新联系人的位置。我的想法导致我在连接中使用 CASE 进行“尝试这个,如果没有,则尝试这个”等的级联过程。
但是,它不会在满足第一个条件时停止,而是返回满足任何条件的所有内容 - 导致在许多情况下,联系人母版中的相同记录被多次加入并在结果中重复。
有没有办法改进连接,或者有没有更好的方法来实现这些数据集之间的匹配?
SELECT nc.email,nc.firstname,nc.lastname,nc.company,cm.id_code,cm.sales_region
FROM [sales].[new_contacts] nc
LEFT JOIN [sales].[contact_master] cm
ON CASE when nc.email = cm.email AND nc.fullname = cm.fullname and nc.company = cm.company then 1
when nc.email = cm.email AND nc.fullname = cm.fullname then 1
when nc.email = cm.email then 1
when nc.fullname = cm.fullname then 1
else 0 END = 1
解决方法
也许这将提供最佳匹配(未经测试)
注意:Outer Apply
将显示 NULL,而 Cross Apply
将排除 NULL 值/命中。
示例
SELECT nc.email,nc.firstname,nc.lastname,nc.company,cm.id_code,cm.sales_region
FROM [sales].[new_contacts] nc
Outer Apply (
Select top 1 *,Hits = IIF(nc.email = cm.email,1,0)
+IIF(nc.fullname = cm.fullname,0)
+IIF(nc.company = cm.company,0)
From [sales].[contact_master] cm
Where nc.email = cm.email
or nc.fullname = cm.fullname
Order By Hits Desc
) cm
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。