我有两张表,一张是父表TableA,另一张是子表TableB。TableB中有一个或多个记录与TableA中的父记录相关联。我需要删除TableB中除最早日期之外的所有记录,也就是TableB中的所有重复记录。我认为不需要在语句中涉及TableA,但为了参考,我会将其包括在内。
TableA
_______
SecID, SecName
1, Sec1
2, Sec2
3, Sec3
4, Sec4
TableB
_________
IncID, SecID, PayDate
16, 1, 11/03/2011
17, 1, 11/04/2011
18, 2, 10/01/2011
19, 3, 01/06/2011
20, 3, 01/09/2011
21, 3, 01/12/2011
22, 4, 10/06/2011
在上面的TableB中,我需要删除记录17、20和21,只留下每个SecID的一条记录。到目前为止,我的代码如下,但是出现了一个问题,它包括了我想要保留的最早的记录:
delete from TableB where PayDate not in (
select min(PayDate)from TableB
having ( count(PayDate) > 1 )
)
DELETE FROM TableB WHERE (secID, PayDate) NOT IN (SELECT secID, MIN(PayDate) FROM TableB GROUP BY secID)
。 - Vincent Malgrat