如果你想删除除了一个ID最大的一切,再下面是“概念”,你想做什么:
delete from CustomerContacts
where CustomerContractsId <> (select max(CustomerContactId)
from CustomerContacts cc2
where cc2.ContactFirstName = CustomerContacts.ContactFirstName and
cc2.ContactLastName = CustomerContacts.ContactLastName and
cc2.CustomerId = CustomerContacts.CustomerId
);
尽管这是标准SQL,但某些数据库的语法可能略有不同。
EDIT(基于评论):
下获取ID时primary
是真实的,或者,如果没有,那么最大的ID:
delete from CustomerContacts
where CustomerContractsId <> (select coalesce(max(case when primary then CustomerContactId end), max(CustomerContactId))
from CustomerContacts cc2
where cc2.ContactFirstName = CustomerContacts.ContactFirstName and
cc2.ContactLastName = CustomerContacts.ContactLastName and
cc2.CustomerId = CustomerContacts.CustomerId
);
您如何识别“主”联系?你的SQL不提供任何提示。 –