基于字段组合在SQL中查找重复记录

时间:2009-03-16 20:38:27

标签: sql sql-server-2005 ssis service integration

我有一个项目,其中一个重要的部分是识别数据库中的记录重复位置(Sql Server 2005)。我知道找到重复记录的明显方法。但是,在这种情况下,我们希望对该过程相当聪明。表格将包含有关潜在客户(潜在客户)的信息。初始表将接受所有潜在客户。然后,我们将通过一个欺骗过程,通过匹配几个字段来检查潜在客户是否重复。例如,我们可能希望匹配姓氏,名字,电子邮件和邮政编码。这只是一个例子,但基本上我们想要使用各种字段创建一个密钥来知道这是否存在。不是欺骗的记录将进入决赛桌。

我想使用SSIS,但我不确定使用SSIS实现这一目标的最佳方法。有人可以引导我朝着正确的方向,或通过检查字段组合提供使用SSIS来处理欺骗的示例的链接吗?

3 个答案:

答案 0 :(得分:2)

在我看来,你试图通过尝试再次猜测它们来试图击败你的用户。不幸的是,这几乎总是不行,因为你可能确实有两个同名的客户端,但不同的zipcodes或其他类似的例子。

您最好的选择是“建议”他们即将保存的客户已经存在(并向他们展示副本),但无论如何都允许他们保存。所以这个过程可能看起来像这样:

  1. 用户输入信息并按保存
  2. 系统使用条件检测潜在的重复,并提示用户
  3. 用户将取消或确认您采取相应措施
  4. 如果没有可能的重复,则可以安全地跳过步骤2-3。

答案 1 :(得分:1)

-- List all Duplicates
select m1.lastname, m1.firstname, m1.email, m1.zipcode
from tblMain m1
inner join tblMain m2
on isnull(m1.lastname, '') = isnull(m2.lastname, '')
and isnull(m1.firstname, '') = isnull(m2.firstname, '')
and isnull(m1.email, '') = isnull(m2.email, '')
and isnull(m1.zipcode, '') = isnull(m2.zipcode)
and m1.ID <> m2.ID
order by 1, 2, 3, 4

要删除最新的重复项,请使用以下内容:

delete from tblMain
where ID in 
(
    select m1.ID
    from tblMain m1
    inner join tblMain m2
    on isnull(m1.lastname, '') = isnull(m2.lastname, '')
    and isnull(m1.firstname, '') = isnull(m2.firstname, '')
    and isnull(m1.email, '') = isnull(m2.email, '')
    and isnull(m1.zipcode, '') = isnull(m2.zipcode)
    and m1.ID > m2.ID
)

答案 2 :(得分:0)

我不明白你怎么能确定SSIS是你问题的答案。为什么不能简单地在“最终”表中创建唯一键以确保不添加重复项?也许你应该更好地解释你的问题......