• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

在一个表中,插入了两个相同的行,想删掉一个,怎么做。

murphydai 2003-05-15 12:17:43
直接删除,有错误不能删。
...全文
28 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
kaolaxiong 2003-05-15
学习
回复
饮水需思源 2003-05-15
先增加一自动递增列(将“标识”改为“是”),再打开表删除其中一行
回复
xlhl 2003-05-15
学习
回复
happydreamer 2003-05-15

删除重复数据

一、具有主键的情况
a.具有唯一性的字段id(为唯一主键)
delect table
where id not in
(
select max(id) from table group by col1,col2,col3...
)
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,
那么只要col1字段内容相同即表示记录相同。

b.具有联合主键
假设col1+','+col2+','...col5 为联合主键
select * from table where col1+','+col2+','...col5 in (
select max(col1+','+col2+','...col5) from table
where having count(*)>1
group by col1,col2,col3,col4
)
group by 子句后跟的字段就是你用来判断重复的条件,
如只有col1,那么只要col1字段内容相同即表示记录相同。


or
select * from table where exists (select 1 from table x where table.col1 = x.col1 and
table.col2= x.col2 group by x.col1,x.col2 having count(*) >1)

c:判断所有的字段
select * into #aa from table group by id1,id2,....
delete table
insert into table
select * from #aa

二、没有主键的情况

a:用临时表实现
select identity(int,1,1) as id,* into #temp from ta
delect #temp
where id not in
(
select max(id) from # group by col1,col2,col3...
)
delete table ta
inset into ta(...)
select ..... from #temp

b:用改变表结构(加一个唯一字段)来实现
alter table 表 add newfield int identity(1,1)
delete 表
where newfield not in
(
select min(newfield) from 表 group by 除newfield外的所有字段
)

alter table 表 drop column newfield




回复
hooboo 2003-05-15
select distict * into #tmp from yourtable

truncate yourtable

insert yourtable select * from #tmp
回复
liukanghui 2003-05-15
建张表A,insert的时候distinct 删了有冗余记录的这张表,把A改为原表的名字~
回复
friendwei 2003-05-15
前天我也遇到过这样的问题,我是用触发器处理的!
回复
blackhawk_yps 2003-05-15
在查询分析器中执行下面代码
select 两行中的一行 into #tmp from yourtbl
delete 两行 from yourtbl
insert into yourtbl select * from #tmp
drop #tmp
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-15 12:17
社区公告
暂无公告