sql中如何删除一个表中重复的记录?

createtablea_dist(idint,namevarchar(20))insertintoa_distvalues(1,'abc')insertintoa_di... create table a_dist(id int,name varchar(20))

insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')

删除重复记录,sql语句该怎么写?
展开
 我来答
百度网友1983cf0
推荐于2019-11-04 · TA获得超过153个赞
知道答主
回答量:41
采纳率:100%
帮助的人:17.1万
展开全部

sql中删除一个表中的重复记录可以采用如下步骤: 

1、把a_dist表的记录用distinct去重,结果放到临时表中。

select  distinct * into #temp from a_dist;

2、把a_dist表的记录全部删除。

delete  from a_dist;

3、把临时表中的数据信息导进到a_dist表中,并删除临时表。

insert  into a_dist select * from #temp;

drop table #temp;

扩展资料:

SQL (结构化查询语言)是用于执行查询的语法。在数据库上执行的大部分工作都由 SQL 语句完成。SQL 语言包含用于更新、插入和删除记录的语法。

增删改查指令构成了 SQL 的 DML 部分:

  • SELECT - 从数据库表中获取数据

  • UPDATE - 更新数据库表中的数据

  • DELETE - 从数据库表中删除数据

  • INSERT INTO - 向数据库表中插入数据

南北186
推荐于2019-11-16 · TA获得超过9.1万个赞
知道小有建树答主
回答量:114
采纳率:100%
帮助的人:5.3万
展开全部

数据库去重复有以下三种方法:

1.两条记录或者多条记录的每一个字段值完全相同,这种情况去重复最简单,用关键字distinct就可以去掉。

2.两条记录之间之后只有部分字段的值是有重复的,但是表存在主键或者唯一性ID。如果是这种情况的话用DISTINCT是过滤不了的,这就要用到主键id的唯一性特点及group by分组。

3.两条记录之间之后只有部分字段的值是有重复的,但是表不存在主键或者唯一性ID。这种情况可以使用临时表,讲数据复制到临时表并添加一个自增长的ID,在删除重复数据之后再删除临时表。

扩展资料:

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断。

select * from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录。

delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)。

select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录。
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录。

select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine戚七七
推荐于2017-09-13 · TA获得超过4.7万个赞
知道大有可为答主
回答量:2万
采纳率:75%
帮助的人:2627万
展开全部
1、必须保证表中有主键或者唯一索引,或者某列数据不能重复。只有这样,才可能使用一句SQL来实现。否则只能考虑其它办法。下面的语句,假定BB列是不重复的,删除后保存BB列值最大的那条记录。
delete from 表
where aa in (select aa from 表 group by aa having count(aa) > 1) and
bb not in (select max(bb) from 表 group by aa having count(aa) > 1);

2、有多种写法:
delete A from B where A.AA = B.AA
delete A from A,B where A.AA = B.AA
delete A where AA in (select AA from B)

3、使用into关键字:
select * into 新表名 from 原表

4、取数据前3位,字段必须是类似char类型,使用类似substring这样的函数(SYBASE是substring,ORACLE是substr):
select substring(字段,1,3) from 表名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FoolRabbit编程
2011-10-19 · 知道合伙人数码行家
FoolRabbit编程
知道合伙人数码行家
采纳数:619 获赞数:3805
毕业于苏州大学,4年编程经验,对WPF有研究。

向TA提问 私信TA
展开全部
可以给你个想法,把不重复的多出来放到一个临时表中,删除原表,再将临时表的数据插入原表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lsx1227x
2011-10-20
知道答主
回答量:1
采纳率:0%
帮助的人:1689
展开全部
如果记录完全相同才算重复记录,那么: (sql server2000下测试通过)

select distinct * into #tmpp from tid
delete from tid
insert into tid select * from #tmpp
drop table #tmpp

如果有id主键(数字,自增1的那种),那么:(sql server2000下测试通过)

delete from tableA where id not in
(select id = min(id) from tableA group by name)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式