高分请教一个SQL语句,顶者有分!!

fq_ln 2005-09-12 05:15:27
有一个表,包含ID,A,B,C等列,其中,ID为自增字段,且为主键。目前此表中的数据有重复,求一Sql语句将重复无用的数据删除,谢谢了!

问题解决,立即揭帖!!
...全文
353 点赞 收藏 27
写回复
27 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
e1000Gb 2005-09-19
delete from 表
where ID not in (select min(id) from 表 group by A,B,C)
回复
borgvardt 2005-09-19
答案已经有了

我帮顶
回复
bugchen888 2005-09-19
libin_ftsafe(子陌红尘) 的是正解。
回复
zwg166 2005-09-18
顶!
回复
iwl 2005-09-18
1.方法一
可以不用语句
假设原来的表为Table,column重复则为重复,需要保留一笔即可
建立一张具有和Table相同结构的临时表myTable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是column,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
  服务器: 消息 3604,级别 16,状态 1,行 1
  已忽略重复的键。
  它表明在产品信息临时表myTableA中不会有重复的行出现。

然后将原表Table清空,并将临时表myTable中数据导入,最后删除临时表myTable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的column,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!

2.如果你是认为要column1 、column2个子段相同才认为是重复,那么你就是组合字段为主键,方法也是如上

3.如果非要用语句,用 libin_ftsafe(子陌红尘) 的,因为你要key 值,如果没有就自己造一个,用identity(data_type,seed,increment),select到一个临时表,然后删除重复的,然后删除原表所有,然后插入即可
回复
天地客人 2005-09-17
delete 表 where ID not in(select min(ID) from 表 group by A,B,C)
回复
lisiyong 2005-09-17
delete 表名
where ID in(select min(ID)
from 表
group by A,B,C
having count(1)>1)
回复
老本 2005-09-17
delete 表 where ID not in(select min(ID) from 表 group by A,B,C)
回复
caobin518 2005-09-17
学到了知识
回复
wangzhibing_3366 2005-09-16
declare @s table
([id] int identity(1,1),A varchar(20),B varchar(20),C varchar(20))

insert @s(A,B,C) values ('1','2','3')
insert @s(A,B,C) values ('1','2','3')
insert @s(A,B,C) values ('2','3','4')
insert @s(A,B,C) values ('2','3','4')
insert @s(A,B,C) values ('2','3','4')
insert @s(A,B,C) values ('3','4','5')
insert @s(A,B,C) values ('3','4','5')


delete from @s where id in( select [id] from @s b where exists (select * from @s c where
c.a=b.a and b.b=c.b and c.c=b.c and b.[id]>c.[id]))
回复
flyinf_guo 2005-09-16


顶,
回复
iwl 2005-09-13
delete from 表 a where

exists(select 1 from 表 where a.ID<ID and A=a.A and B=a.B and C=a.C)
回复
youzelin 2005-09-13
长知识,顶
回复
y2wxwsh000 2005-09-13
up
回复
wwwhch2004 2005-09-13
delete a from 表 a where exists(select 1 from 表 where ID>a.ID and A=a.A and B=a.B and C=a.C)
可以!顶顶
回复
撸大湿 2005-09-13
UP
回复
samfeng_2003 2005-09-13
declare @s table
([id] int identity(1,1),A varchar(20),B varchar(20),C varchar(20))

insert @s(A,B,C) values ('1','2','3')
insert @s(A,B,C) values ('1','2','3')
insert @s(A,B,C) values ('2','3','4')
insert @s(A,B,C) values ('2','3','4')
insert @s(A,B,C) values ('2','3','4')
insert @s(A,B,C) values ('3','4','5')
insert @s(A,B,C) values ('3','4','5')

delete from @s
where [id] not in
(select [id] from @s b where not exists (select * from @s c where
c.a=b.a and b.b=c.b and c.c=b.c and b.[id]>c.[id]))

select * from @s

id A B C
----------- -------------------- -------------------- --------------------
1 1 2 3
3 2 3 4
6 3 4 5
回复
accpbl0330 2005-09-13
select distinct * from 表名

只是用来查看不同的数据` 要删除重复的数据`同上^^
回复
accpbl0330 2005-09-13
select distinct * from 表名
回复
wyb0026 2005-09-13
delete tab from tab inner join
(select max(id) id ,a,b,c from tab group by a,b,c) as t0 on
tab.a=t0.a and
tab.b=t0.b and
tab,c=t0.c and
tab.id<>t0.id

回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2005-09-12 05:15
社区公告
暂无公告