删除表中的重复记录

删除表中的重复记录,第1张

概述 如何按字段删除重复记录? 一张表里面以两个字段为唯一字段,当几条记录的这两个字段完全相同时,需要删除重复项,如下表 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

 如何按字段删除重复记录?

一张表里面以两个字段为唯一字段,当几条记录的这两个字段完全相同时,需要删除重复项,如下表
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.

总结

以上是内存溢出为你收集整理的删除表中的重复记录全部内容,希望文章能够帮你解决删除表中的重复记录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存