?如何按字段删除重复记录?
一张表里面以两个字段为唯一字段,当几条记录的这两个字段完全相同时,需要删除重复项,如下表 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 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语句怎么写
CREATE TABLE Tb1(id int,[a] varchar(255),[b] varchar(255),[c] varchar(255),[d] varchar(255)) INSERT Tb1(id,[a],[b],[c],[d]) ?????????? SELECT 1,'1','2','3','4' UNION ALL? SELECT 2,'5','5' UNION ALL? SELECT 3,'7','9' UNION ALL? SELECT 4,'4','6'
delete Tb1 where [id] not in (select max([id]) from Tb1 group by a,b ) select * from tb1 ? drop table tb1
如果要同时删除第一和第三行 即如下结果: a b c d 1 5 3 5
语句如下:
delete m from tb t inner join ( select a,b from tb group by a,b having count(*)>1 )n on m.a = n.a and m.b = n.b? 或 delete * from tb as m, ( select a,b having count(*)>1 )n where m.a = n.a and m.b = n.b
-----------------------------------------------------------------------------------------------------------
在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?谢谢! 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select? peopleId? from? people? group? by? peopleId? having? count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people? where peopleId? in (select? peopleId? from people? group? by? peopleId?? having? count(peopleId) > 1) and rowid not in (select min(rowid) from? people? group by peopleId? having count(peopleId )>1)
3、查找表中多余的重复记录(多个字段)? select * from vitae a where (a.peopleId,a.seq) in? (select peopleId,seq from vitae group by peopleId,seq? having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 delete from vitae a where (a.peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 select * from vitae a where (a.peopleId,seq having count(*)>1) ----------------------------------------------------------------------------------------------------------- 你的表mailrecord里面含有text、ntext 或 image类型的字段
不能以 DISTINCT 方式选择 text、ntext 或 image 数据类型! -------------------------------------------------------------------- 楼上几位的方法只能处理非text、ntext 或 image类型的记录
对于text、ntext 或 image类型的字段重复的删除好象还没有别的办法。。。
如果要保持text、ntext 或 image这些字段唯一那有些麻烦。
因为数据库不对这些字段进行索引。要保证唯一必须采用存储过程或外部过程同时保存该数据的Key并对Key进行唯一索引。
比如说,你可以在把一个Text字段提交数据库之前计算它的MD5值或Hash值,然后把该值进行索引,基本上就能保证字段唯一了。 ------------------------------------------------------------------------------------------
建议不要用in,用exists.
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|