0

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

主桌(人)

PersonID 姓名 年龄 SSN

1 索拉布 12 1234

2 索拉布 13 1234

3 索拉布 14 4567

子表(订单)

OrderID|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) 和订单。

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

4

1 回答 1

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
  )
)
于 2013-10-11T19:58:21.080 回答