基于主子关系的sql重复数据删除

时间:2013-10-11 19:44:35

标签: .net sql relational-database

我有2张桌子(主人和孩子)

主表(人)

PersonID名称年龄SSN

1 Saurabh 12 1234

2 Saurabh 13 1234

3 Saurabh 14 4567

子表(订单)

订单ID |是PersonID |的ItemID |数量

1 1 1 1

2 1 2 1

3 2 1 1

4 2 2 1

5 3 1 1

我需要根据以下重复数据删除条件删除人员表中的所有重复记录。如果他们具有相同的名称,SSN和订单,则他们是重复的。在此示例中,ID为1和2的人员是重复的,因为他们具有相同的名称(Saurabh),SSN(1234)和订单。

在单个表格上执行重复数据删除很容易,但如果您有父子关系,我就无法获得有效的方法。

1 个答案:

答案 0 :(得分:1)

我相信以下内容会为您提供您正在寻找的结果。我会在没有删除部分的情况下运行查询并验证结果。

DELETE FROM Person WHERE PersonID IN 
(
  SELECT P.PersonID
  FROM Person AS P
  INNER JOIN [Order] AS O 
  ON P.PersonID = O.PersonID
  WHERE P.PersonID IN 
  (
    SELECT IP.PersonID
    FROM Person AS IP
    INNER JOIN [Order] AS IO 
    ON IP.PersonID = IO.PersonID
    WHERE IP.PersonID <> P.PersonID
    AND IP.Name = P.Name
    AND IP.SSN = P.SSN
    AND O.ItemID = IO.ItemID 
    AND O.Quantity = IO.Quantity
  )
)