繁体   English   中英

合并多个匹配条件

[英]Merge with multiple matching conditions

我必须编写一个t-sql merge语句,其中必须满足多个条件才能进行匹配。

表格栏名称:ID,电子邮件地址,名字,姓氏,标题,移动电话,身份证,帐号,地址,邮政编码

这里的主要问题是,我正在使用的数据库没有必填字段,没有要比较的主键,并且源表也可以具有重复记录。 结果,有许多组合可以检查源表是否与目标表重复。 我的经理提出了以下方案

  1. 我们可能有两个人使用相同电子邮件地址的数据,因此,电子邮件地址,名字和姓氏匹配为100%匹配(认为其他所有列均为空)

  2. mobile和accountnumber匹配为100%匹配的数据(认为其他所有列均为空)

  3. 标题,姓氏,邮政编码,Dob匹配为100%匹配(认为其他所有列均为空)

在执行此任务时,我无法查看数据,因为我是一名新员工,而我的员工暂时不希望我看到此数据。 所以,我有点想像力。

解决方案现在,我正在考虑,而不是对照目标数据库检查源的现有记录,而是使用存储过程语句来清理源数据,如果满足一个重复条件,它将跳过下一个重复的删除语句并插入数据进入目标表。

with cte_duplicate1 AS
    (
        select emailaddress, sname, ROW_NUMBER() over(partition by emailaddress, sname order by emailaddress) as dup1
        from DuplicateRecordTable1
    )
    delete from cte_duplicate1
    where dup1>1;

(如果执行了第一个cte_duplicate1代码,则它将跳过cte_duplicate2)

with cte_duplicate2 AS
    (
        select emailaddress, fname, ROW_NUMBER() over(partition by emailaddress, fname order by emailaddress) as dup2
        from DuplicateRecordTable1
    )
delete from cte_duplicate2
where dup2>1;

目前,这是一个模糊的计划。 我不知道,是否可以实现。

我做了一份无法查看数据的工作,因为我是新入职员工,而我的员工不希望我提供与我合作的数据。 所以,我有点想像力。

无论如何,这里的主要问题是,我正在使用的数据库没有必填字段,没有要比较的主键,并且源表也可以有重复记录。 结果,有许多组合可以检查源表是否与目标表重复。

解决方案现在,我正在考虑,而不是对照目标数据库检查源的现有记录,而是使用存储过程语句来清理源数据,如果满足一个重复条件,它将跳过下一个重复的删除语句并插入数据进入目标表。

with cte_duplicate1 AS
    (
        select emailaddress, sname, ROW_NUMBER() over(partition by emailaddress, sname order by emailaddress) as dup1
        from DuplicateRecordTable1
    )
    delete from cte_duplicate1
    where dup1>1;

(如果执行了第一个cte_duplicate1代码,则它将跳过cte_duplicate2)

with cte_duplicate2 AS
    (
        select emailaddress, fname, ROW_NUMBER() over(partition by emailaddress, fname order by emailaddress) as dup2
        from DuplicateRecordTable1
    )
delete from cte_duplicate2
where dup2>1;

目前,这是一个模糊的计划。 我不知道,是否可以实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM