博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用sql删除数据库重复的数据的方法
阅读量:5247 次
发布时间:2019-06-14

本文共 3894 字,大约阅读时间需要 12 分钟。

 

/***********************************************

两个意义上的重复记录:
1.是完全重复的记录,也即所有字段均重复的记录,
2.是部分关键字段重复的记录,比如username字段重复,
  而其他字段不一定重复或都重复可以忽略,这类重复
  问题通常要求保留重复记录中的第一条记录
************************************************/

/*1.数据完全重复(用到了一个临时表#Tmp)*/

CREATE TABLE admin1(
 [username] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [password] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

INSERT INTO admin1(username,password) VALUES('liyan','111')

INSERT INTO admin1(username,password) VALUES('liyan','111')
INSERT INTO admin1(username,password) VALUES('liyan','222')
INSERT INTO admin1(username,password) VALUES('liyan','222')
INSERT INTO admin1(username,password) VALUES('liyan','333')
select * from admin1

select distinct * into #Tmp from admin1

drop table admin1
select * into admin1 from #Tmp
drop table #Tmp
select * from admin1

/*2.某个字段重复(用到了2个临时表:Tmp1,Tmp2)*/

CREATE TABLE [dbo].[admin](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [username] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [password] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 CONSTRAINT [PK_admin] PRIMARY KEY CLUSTERED
(
 [id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

INSERT INTO admin(username,password) VALUES('adminstrator','111')

INSERT INTO admin(username,password) VALUES('adminstrator','111')
INSERT INTO admin(username,password) VALUES('adminstrator','222')
INSERT INTO admin(username,password) VALUES('adminstrator','222')
INSERT INTO admin(username,password) VALUES('adminstrator','333')
INSERT INTO admin(username,password) VALUES('liyan','111')
INSERT INTO admin(username,password) VALUES('liyan','111')
INSERT INTO admin(username,password) VALUES('liyan','222')
INSERT INTO admin(username,password) VALUES('liyan','222')
INSERT INTO admin(username,password) VALUES('liyan','333')

if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#Tmp1')) drop table #Tmp1

select id as autoid, * into #Tmp1 from admin
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#Tmp2')) drop table #Tmp2
select min(autoid) as autoid into #Tmp2 from #Tmp1 group by username,password
if exists(select * from dbo.sysobjects where id = object_id(N'admin') and OBJECTPROPERTY(id,N'IsUserTable') = 1) drop table admin
select id,username,password into admin from #Tmp1 where autoid in(select autoid from #tmp2)

=====================================================

下面的是引用网上的一篇文章()

关于使用sql删除数据库重复的数据的方法整理:

1.数据完全重复
通过一个临时表过渡一下
insert into table1 select distinct field from table
drop table table
insert into table select * from table1
2.某个字段重复
这个在网上有很多相关的解决方法,较常见的有
delete from table where id not in (select min(id) from table group by name)
delete from table where field in (select field from table group by field having count(*) > 1)
上面的方法在删除小数量级的数据时还有用,当一旦处理的数据是几十万或者更多时就出问题了,一般的机器估计一运行就马上给费了。其实稍有点常识的算一算就知道这样的语句会有多大的运算量了,它的运算量至少是以乘方的形式递增的,想想就恐怖。
我在这里主要是要给出对于大数量级的表的重复数据删除的解决方案,其实也很简单,也是利用了一个过渡表来实现
insert in tabletemp select * from table
delete from table as a where a.id > (select min(b.id) from table1 as b where b.field=a.field)
drop table tabletemp
这样利用了数据库的索引的优势,大大的减少运算量 

========================================

SQL如何删除重复的数据行- -

delete from table where id in (

 select max(id) from table group by name having count(*)>1
)--删除重复记录中ID最大的一条(如果有2条以上的重复记录则需多次执行)

如果table数据完全一样,可以先将数据导入到一个临时表内

delete from table where id  not in (

 select min(id) from table group by name
)--只保留重复记录的第一条(id最小的一条)

 太少了..加点其它的内容

CREATE  PROCEDURE 存储过程名    --执行动态SQL语句

(
   @num int
)
 AS
declare @string nvarchar(100)
set @string='SELECT  TOP  '+ CAST (@num as nvarchar) +' * FROM  表名' 
exec (@string)

=====================================

select ID,NAME from house1 where name='中凯' and roomtype='双人间' and startdate>='2007-5-25' and id in(select min(id) from group by name)

name相同时id小的出现  

======================

一般就是distinct , group by , #tempTable,

当然借助index会更快些

转载于:https://www.cnblogs.com/u0mo5/p/4100934.html

你可能感兴趣的文章
html页面引入ts文件,如何将ts文件中收到的参数显示到html页面
查看>>
html伪类元素居中,总结css伪类的几种常见操作
查看>>
html5 xdwlnjs cn,最近需要调用一个网站的js,但是发现是加密的,有大佬来解密下吗?...
查看>>
html字体样式源码,css文字样式中属性的介绍(附代码)
查看>>
html伪元素before占用高度,使用before伪元素出现的问题?
查看>>
mysql 编码php,php-MySQL的编码问题(和基础知识)
查看>>
基于matlab的prony方法实现,基于MATLAB的Prony方法实现
查看>>
php7 空对象,js 判断是否是空对象
查看>>
代替oracle dblink,oracle dblink
查看>>
linux中检测用户信息的命令是,Linux中系统状态检测命令
查看>>
凯撒字母加密算法c语言,C语言实现:凯撒密码算法(加密 与 解密)
查看>>
求矩形的最小值c语言,C语言复习---矩形法求定积分函数
查看>>
c语言找到串口,再次熟悉串口
查看>>
c语言删除数组重复元素并升序,C语言编程题: 编写函数,从一个已经排序的数组中删去某数后,该数组仍然有序....
查看>>
国二C语言大题评分,计算机二级C语言题型和评分标准
查看>>
android修改屏幕长宽比例,Android屏幕适配之修改density
查看>>
android map数据更新数据,Android的Databinding-数据、Map绑定
查看>>
微型计算机原理及应用 课程设计,《微型计算机原理及其应用》课程设计.docx
查看>>
用户输入查询与拼音首字母的结合,提高用户的操作体验
查看>>
bzoj 3996 最小割
查看>>