资源描述:
《sql删除重复记录的n种方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SQL删除重复记录的N种方法--<一>:selectdistinct*into#tempfrom表truncatetable表insert表select*from#tempdroptable--<二>带有标识列--备份数据select*into#tempfrom表altertable#tempdropcolumnid--删除原表数据truncatetablemsgtable--恢复数据并去掉重复数据insertinto表selectdistinct*from#temp--<三>deleteFromaawhereain(se
2、lectaFromaagroupbyahavingcount(a)>1)--<四>altertable表addnewfieldintidentity(1,1)delete表wherenewfieldnotin(selectmin(newfield)from表groupby除newfield外的所有字段)altertable表dropcolumnnewfield--<五>--添加一个处理的标识字段altertable表addidintidentity(1,1)go --删除重复记录deleteafrom表aleftjoi
3、n(selectid=min(id)from表groupbya,b)bona.id=b.idwhereb.idisnullgo--删除处理用的标识字段altertable表dropcolumnid--参考:/*一张表里面以两个字段为唯一字段,当几条记录的这两个字段完全相同时,需要删除重复项,如下表 a b c d 1 2 3 4 1 5 3 5 1 2 7 9 以a、b为唯一字段,第一条和第三条的a、b完全相同,所以,需要删除第一条记录1 2 3 4 或者第三条记录1
4、2 7 9 即如下结果: a b c d 1 2 3 4 1 5 3 5 或 a b c d 1 5 3 5 1 2 7 9 请问各位大侠这种sql语句怎么写*/ CREATETABLETb1(idint,[a]varchar(255),[b]varchar(255),[c]varchar(255),[d]varchar(255))INSERTTb1(id,[a],[b],[c],[d])SELECT1,'1','2','3','4'U
5、NIONALLSELECT2,'1','5','3','5'UNIONALLSELECT3,'1','2','7','9'UNIONALLSELECT4,'1','4','7','6'deleteTb1where[id]notin(selectmax([id])fromTb1groupbya,b)select*fromtb1droptabletb1如果要同时删除第一和第三行即如下结果:abcd1535语句如下:deletemfromtbtinnerjoin(selecta,bfromtbgroupbya,bhavingco
6、unt(*)>1)nonm.a=n.aandm.b=n.b或delete*fromtbasm,(selecta,bfromtbgroupbya,bhavingcount(*)>1)nwherem.a=n.aandm.b=n.b--在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?谢谢!1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleId
7、havingcount(peopleId)>1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录deletefrompeoplewherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1)androwidnotin(selectmin(rowid)frompeoplegroupbypeopleIdhavingcount(peopleId)>1)3、查找表中多余的重复记录(
8、多个字段)select*fromvitaeawhere(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录deletefr