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

murphydai 2003-05-15 12:17:43
直接删除,有错误不能删。
...全文
51 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧