请问怎样删除重复记录啊?在线等待!!!!!!!!

chz_ok 2003-07-25 12:16:11
我在SQL2000的一个表中有多条重复记录,我想删除记录可是不让删,请问我得用什么办法才能将记录删除啊?请指教!!!!
...全文
59 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
softheaded 2003-07-26
  • 打赏
  • 举报
回复
我是个新手,也遇到同样的问题,我想借此问一句,为什么会产生重复记录呢?
如果定义了主键是不是就不会有这种现象产生了?
yonghengdizhen 2003-07-25
  • 打赏
  • 举报
回复
楼主的情形看来是没有定义主键,导致sql server的企业管理器拒绝执行此种操作,因为它也不知道该删哪一条..
yonghengdizhen 2003-07-25
  • 打赏
  • 举报
回复
所以我一直认为,任何数据表.抛开业务内涵不说,仅仅从数据唯一这个意义上来说,都应该定义一个独立于任何数据属性的字段作为主键,并保证唯一性,才可以应付需求频繁变更的情形,可是很多人对此不以为然..

郁闷啊..
ji_hui 2003-07-25
  • 打赏
  • 举报
回复
如果有主键,可以;

有以下一个表:
ID Name address
----------- -------------------------------------------------- --------------------------------------------------
1 aa aa
2 aa aa
3 bb bb
4 cc cc
5 bb bb
6 ee ee

执行
select max(id),name,address from table1 group by name,address

结果:
id name address
----------- -------------------------------------------------- --------------------------------------------------
2 aa aa
5 bb bb
4 cc cc
6 ee ee
CrazyFor 2003-07-25
  • 打赏
  • 举报
回复
如果有ID字段,就是具有唯一性的字段

delect table where id not in (

select max(id) from table group by col1,col2,col3...
)
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。



2,如果是判断所有字段也可以这样
select * into #aa from table group by id1,id2,....
delete table
insert into table
select * from #aa



3,没有ID的情况

select identity(int,1,1) as id,* into #temp from tabel
delect # where id not in (
select max(id) from # group by col1,col2,col3...)
delect table
inset into table(...)
select ..... from #temp


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字段内容相同即表示记录相同。

2,
select identity(int,1,1) as id,* into #temp from tabel
select * from #temp where id in (
select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)
zjcxc 元老 2003-07-25
  • 打赏
  • 举报
回复
如果你的表中有主键,可以用:

delete 你的表 where 主键 in(
select aa from(select min(主建) as aa,其他列的列表 from 你的表 group by 其他列的列表) aa)
zjcxc 元老 2003-07-25
  • 打赏
  • 举报
回复
begin tran --为了保存数据的完整性,使用事务处理
--首先将不重复的数据导出到临时表
select distinct * into #temp from 你的表

--删除原表的数据
truncate table 你的表

--将数据写回到原表中
insert into 你的表 select * from #temp

commit tran
ji_hui 2003-07-25
  • 打赏
  • 举报
回复
如果你的表没有主键,可以SELECT DISTINCT * INTO NEWTABLE FROM YOURTABLE
然后删除YOURTABLE,最后将NEWTABLE更名为YOURTABLE.

34,590

社区成员

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

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