如何删除数据库中完全相同的两行

时间:2021-10-27 21:42:15
sql数据库中的一个表,没有定义主键,添加数据时不小心添加了若干条完全一样的记录,这时候在是删除的时候就出现了问题,提示是更新将影响到多行
那么这时候怎么样才能删除这些记录呢?

7 个解决方案

#1


比较简单的方法
select distinct * into 表备份 from 表
delete from 表
insert into 表 select * from 表备份
dtop table 表备份

#2


set xact_abort on
begin tran
  select distinct * into #t from 表
  delete from 表
  insert 表 select * from #t
  drop table #t
commit tran

#3


也可以增加一个自动标识列,这样记录就不重复了,等删除了原先重复行后再取掉标识列。

#4


同意ghostzxp(幽灵) 的办法

#5


ghostzxp(幽灵) 和zoubsky(与世隔绝)的办法都不错.

#6


不要備份整個表,備份那一條記錄就ok了。
select distinct 字段1,字段2,..... into #t from table group by  字段1,字段2,.....
having count(*)>1
delete from table where .....
insert into table select * form #t

#7


--建立测试环境
if exists(select 1 from sysobjects where xtype='U' and name='TestA')
drop table TestA
go
create table TestA
(AA varchar(20),
BB varchar(20))

insert into TestA 
select 'abcd','abcd'
union all select '1234','1234'
union all select 'a','b'
union all select 'a','b'
union all select 'a','b'
union all select 'a','b'
union all select '1234','1234'
union all select '1234','1234'
select * from TestA
--测试
select distinct AA,BB into #temp from TestA group by AA,BB having count(*)>=1
delete from TestA where AA<>''
insert into TestA select * from #temp
drop table #temp
--删除测试环境
drop table TestA

#1


比较简单的方法
select distinct * into 表备份 from 表
delete from 表
insert into 表 select * from 表备份
dtop table 表备份

#2


set xact_abort on
begin tran
  select distinct * into #t from 表
  delete from 表
  insert 表 select * from #t
  drop table #t
commit tran

#3


也可以增加一个自动标识列,这样记录就不重复了,等删除了原先重复行后再取掉标识列。

#4


同意ghostzxp(幽灵) 的办法

#5


ghostzxp(幽灵) 和zoubsky(与世隔绝)的办法都不错.

#6


不要備份整個表,備份那一條記錄就ok了。
select distinct 字段1,字段2,..... into #t from table group by  字段1,字段2,.....
having count(*)>1
delete from table where .....
insert into table select * form #t

#7


--建立测试环境
if exists(select 1 from sysobjects where xtype='U' and name='TestA')
drop table TestA
go
create table TestA
(AA varchar(20),
BB varchar(20))

insert into TestA 
select 'abcd','abcd'
union all select '1234','1234'
union all select 'a','b'
union all select 'a','b'
union all select 'a','b'
union all select 'a','b'
union all select '1234','1234'
union all select '1234','1234'
select * from TestA
--测试
select distinct AA,BB into #temp from TestA group by AA,BB having count(*)>=1
delete from TestA where AA<>''
insert into TestA select * from #temp
drop table #temp
--删除测试环境
drop table TestA