数据库删除重复数据 sql中如何删除一个表中重复的记录
本篇文章给大家谈谈数据库删除重复数据,以及sql中如何删除一个表中重复的记录对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
sql数据库中出现重复行数据,如何删除这些重复记录
示例
假设存在一个产品信息表Products,其表结构如下:
CREATETABLEProducts(
ProductIDint,
ProductNamenvarchar(40),
Unitchar(2),
UnitPricemoney
)
表中数据如图:
图中可以看出,产品Chang和Tofu的记录在产品信息表中存在重复。现在要删除这些重复的记录,只保留其中的一条。步骤如下:
第一步——建立一张具有相同结构的临时表
CREATETABLEProducts_temp(
ProductIDint,
ProductNamenvarchar(40),
Unitchar(2),
UnitPricemoney
)
第二步——为该表加上索引,并使其忽略重复的值
方法是在企业管理器中找到上面建立的临时表Products _temp,单击鼠标右键,选择所有任务,选择管理索引,选择新建。如图2所示。
按照图2中圈出来的地方设置索引选项
第三步——拷贝产品信息到临时表
insertintoProducts_tempSelect*fromProducts
此时SQL Server会返回如下提示:
服务器:消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表Products_temp中不会有重复的行出现。
第四步——将新的数据导入原表
将原产品信息表Products清空,并将临时表Products_temp中数据导入,最后删除临时表Products_temp。
deleteProductsinsertintoProductsselect*fromProducts_tempdroptableProducts_temp
这样就完成了对表中重复记录的删除。无论表有多大,它的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的
sql中如何删除一个表中重复的记录
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_distselect* from#temp;
drop table#temp;
扩展资料:
SQL(结构化查询语言)是用于执行查询的语法。在数据库上执行的大部分工作都由 SQL语句完成。SQL语言包含用于更新、插入和删除记录的语法。
增删改查指令构成了 SQL的 DML部分:
SELECT-从数据库表中获取数据
UPDATE-更新数据库表中的数据
DELETE-从数据库表中删除数据
INSERT INTO-向数据库表中插入数据
SQL中如何删除重复数据
select
字段1,字段2,字段3
from
table
group
by
字段1,字段2,字段3
having
count(*)>1
用上边这句能找出所有重复的数据
字段1,2,3你替换成你表里的字段名,如果有更多字段的话,你就继续添加,最后group
by的时候不要忘记了
删除的时候要建立一个临时表
create
table
new_table
as
select
字段1,字段2,字段3
from
old_table
group
by
字段1,字段2,字段3;
然后删除原表数据
truncate
table
old_table;
然后把临时表数据反插回去
insert
into
new_table
select
*
from
old_table;
删除数据库中重复数据的几个方法
方法一
declare@maxinteger,@idinteger
declarecur_rowscursorlocalforselect主字段,count(*)from表名groupby主字段havingcount(*)>1
opencur_rows
fetchcur_rowsinto@id,@max
while@@fetch_status=0
begin
select@max=@max-1
setrowcount@max
deletefrom表名where主字段=@id
fetchcur_rowsinto@id,@max
end
closecur_rows
setrowcount0
方法二
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用selectdistinct*fromtableName就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
selectidentity(int,1,1)asautoID,*into#TmpfromtableName
selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,autoID
select*from#TmpwhereautoIDin(selectautoIDfrom#tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
您可能感兴趣的文章:sqlserver中重复数据值只取一条的sql语句sqlserver合并DataTable并排除重复数据的通用方法分享教你几种在SQLServer中删除重复数据方法sql删除重复数据的详细方法SQL语句删除2条重复数据一条保留一条一个过滤重复数据的 SQL语句删除重复数据的算法SQL Server中删除重复数据的几个方法
关于本次数据库删除重复数据和sql中如何删除一个表中重复的记录的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。