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

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

问题解决,立即揭帖!!
...全文
390 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

加载更多回复(7)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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