sqlserver2005 表中有两条完全相同的记录,如何删除这两条记录

时间:2021-06-07 21:42:42
sqlserver2005 表中没有设置主键,
但有两条完全相同的记录,想删除其中一条,不能删除,这两条记录都不能删除
如何删除这两条记录

13 个解决方案

#1


没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:

delete from 
(
select *,ps=row_number()over(order by getdate())
from table
where id='重复记录的那个id'
) a
where a.ps=2

#2


该回复于2012-11-26 14:27:35被版主删除

#3


delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps<>1

删除多条重复,只留下一条

#4


yes  delete  其中1条

#5


先增加一自动递增的标识列,再删除其中一行,再删除标识列

#6


用distinct的方法,把所有数据查出来(此时已经是唯一了),插入一个临时表。然后truancate源表,再把临时表的数据插回来,最后建议建立一个主键或者自增ID.

#7


都没有看懂楼主的意思么?

有两条完全相同的记录,想删除其中一条,不能删除,这两条记录都不能删除
如何删除这两条记录 


这句话什么逻辑? sqlserver2005 表中有两条完全相同的记录,如何删除这两条记录

#8


如果是两条相同记录,没有主键。不能同时删除这两条记录,必须保留一条,那么用楼上DBA的方法。

#9


引用 1 楼 beisenxh 的回复:
没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:


SQL code?



12345678

delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps=2

这个不行啊。有语法错误

#10


楼主的意思是两条完全相同的记录,但是没有标识列,怎么删除,如果有id就好办了,
name  age
test  22
test  22

#11


select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp

#12


建立一个临时表过渡一下

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp1

#13


引用 9 楼 tangguangqiang 的回复:
Quote: 引用 1 楼 beisenxh 的回复:

没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:


SQL code?



12345678

delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps=2

这个不行啊。有语法错误


delete  a from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps=2

#1


没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:

delete from 
(
select *,ps=row_number()over(order by getdate())
from table
where id='重复记录的那个id'
) a
where a.ps=2

#2


该回复于2012-11-26 14:27:35被版主删除

#3


delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps<>1

删除多条重复,只留下一条

#4


yes  delete  其中1条

#5


先增加一自动递增的标识列,再删除其中一行,再删除标识列

#6


用distinct的方法,把所有数据查出来(此时已经是唯一了),插入一个临时表。然后truancate源表,再把临时表的数据插回来,最后建议建立一个主键或者自增ID.

#7


都没有看懂楼主的意思么?

有两条完全相同的记录,想删除其中一条,不能删除,这两条记录都不能删除
如何删除这两条记录 


这句话什么逻辑? sqlserver2005 表中有两条完全相同的记录,如何删除这两条记录

#8


如果是两条相同记录,没有主键。不能同时删除这两条记录,必须保留一条,那么用楼上DBA的方法。

#9


引用 1 楼 beisenxh 的回复:
没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:


SQL code?



12345678

delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps=2

这个不行啊。有语法错误

#10


楼主的意思是两条完全相同的记录,但是没有标识列,怎么删除,如果有id就好办了,
name  age
test  22
test  22

#11


select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp

#12


建立一个临时表过渡一下

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp1

#13


引用 9 楼 tangguangqiang 的回复:
Quote: 引用 1 楼 beisenxh 的回复:

没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:


SQL code?



12345678

delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps=2

这个不行啊。有语法错误


delete  a from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps=2