delete from table where exists (select 1 from table t1
where t1.重复字du段 = table.重复字段 and t1.id < table.id )
-----------看成是一个循zhi环,从表第一行到最后一行,dao如果存在比本行ID小的重复数据,那么删除本行。这样循环后的最终结果就是保留了最小ID的一行。
保留最大也是同理
delete from table where exists (select 1 from table t1
where t1.重复字段 = table.重复字段 and t1.id > table.id )
---------一个循环,从第一行到最后一行,如果存在ID比本行大的重复数据,删除本行,最后剩下的都是不重复的且ID是最大的记录。
实际应用:
//根据personnelId删除教育经历中的重复数据
string sql = string.Format(@"delete from HRPersonnelFormalEducation where EducationId in
(
select EducationId from HRPersonnelFormalEducation as a
where exists
(select 1 from
(select EndDate,GraduateSchool,Major,PersonnelId
from HRPersonnelFormalEducation
group by EndDate,GraduateSchool,Major,PersonnelId having count(*) > 1
) b
where a.EndDate=b.EndDate and a.GraduateSchool=b.GraduateSchool
and a.Major=b.Major and a.PersonnelId=b.PersonnelId and b.PersonnelId ={0}
)
and EducationId not in
(select max(EducationId) from HRPersonnelFormalEducation
group by EndDate,GraduateSchool,Major,PersonnelId having count(*) > 1
)
)", PersonnelId);
DelNum += GetDaoTemplate().ExecuteNonQuery(sql);
根据传入的personnelId作为判断条件,以及教育经历中的毕业时间(EndDate),毕业学校(GraduateSchool),所学专业(Major)这三者是否全部相同,如果相同,认为这两条数据重复,删除掉主键ID(EducationId )小的那一个