sql数据库删除重复行,保留一条记录(最大/最小id)

删除重复,保留最小id
删除重复,保留最小id

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 )小的那一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值