检查重复项

时间:2015-08-27 12:06:50

标签: sql-server duplicate-data

在SQL Server 2008中,我有一个表tblProfile,其中包含员工编号(EmID)和profileID(ProID)。 EmID+ProID是组合的主键。

我在EmID上找到了来自员工表的“重复”。每个员工可以有多个ProID,但两个ID的组合都是唯一的。

当然,从EmID一侧来看,它们并不重复,但在员工表中它们是重复的。

例如在tblEmployee中有:

EmId        Lastname      Firstname   Birthdate  
------------------------------------------------
22          Mayer          Frank      1960-01-01  
23          Meyer          Frank      1960-01-01

现在我想用这个逻辑“clean”表。清除tblEmployee不是问题,而是如何使用此逻辑清除tblProfile

我们假设我要删除EmID = 23,因为我想保留旧记录。如果EmID = 23的现有配置文件尚未定义为22,则不存在问题,但如果已经存在22 + 2的组合,则在将23 + 2更改为22 +时会产生错误2.

数据:

EmID    ProID  
22       2  
23       2  
23       1   

在这种情况下,我必须删除23 + 2,但将23 + 1更改为22 + 1。

结果应为

22       1
22       2

这是我的目标。

我真的不知道如何处理。

我无法从

开始
delete from tblprofile 
where EmID = @duplicateEmID    

因为我删除了可能用来保存个人资料的记录....

谢谢你的帮助

迈克尔

1 个答案:

答案 0 :(得分:1)

您将通过多个简单步骤完成此操作。

1)运行查询以识别要删除的员工欺骗(不是最旧的)。将它们存储在临时表中。还要添加一个名为" NewID"的列。在临时表中。

2)运行查询以更新临时表,并将NewID的值设置为该员工的最旧emId。

3)运行查询以将NewID和ProfileID的组合插入到Profile表中,其中ProfileID当前存在时具有旧员工ID,以及NewID&组合。 ProfileID尚不存在。

4)删除Profile表中包含旧profileID的所有行。

将一个复杂的问题分解为最基本的步骤通常可以轻松解决。