/***********************************************
两个意义上的重复记录:
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)

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

下面的是引用网上的一篇文章(http://tb.blog.csdn.net/TrackBack.aspx?PostId=1530926)

关于使用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会更快些

用sql删除数据库重复的数据的方法的更多相关文章

  1. sql删除数据库重复字段的行

    要保留的数据: WITH summary AS ( SELECT p.id, p.customer, p.total, ROW_NUMBER() OVER(PARTITION BY p.custome ...

  2. sql删除多余重复的数据只保留一条

    delete from people where   peopleName in (select peopleName    from people group by peopleName      ...

  3. SQL DISTINCT去掉重复的数据统计方法【转】

    SELECT指令让我们能够读取表格中一个或数个栏位的所有资料.这将把所有的资料都抓出,无论资料值有无重复.在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况.换句话说,我们需要知道这个表格/ ...

  4. 删除sql server中重复的数据

    原文:删除sql server中重复的数据 with list_numbers as( select Name, AuthorOrTime, Url, Price, EstimatePrice, Si ...

  5. SQL跨数据库复制表数据

    SQL跨数据库复制表数据   不同服务器数据库之间的数据操作 不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库.. ...

  6. SQL删除数据库里所有表的外键,同时删除所有用户表

    SQL删除数据库里所有表的外键,同时删除所有用户表 删除所有的用户表的外键,直接将下面的代码拷贝到数据库里执行即可: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  7. sql server2008数据库复制实现数据同步常见问题

    sql server2008数据库复制实现数据同步常见问题 在原作者基础上追加 sql server2008数据库复制实现数据同步常见问题 23.发布 'xx' 的并发快照不可用,因为该快照尚未完全生 ...

  8. sql server 数据库复制实现数据同步常见问题(不定期更新)

    sql server2008数据库复制实现数据同步常见问题 在原作者基础上追加 sql server2008数据库复制实现数据同步常见问题 23.发布 'xx' 的并发快照不可用,因为该快照尚未完全生 ...

  9. PHP MySQL Delete删除数据库中的数据

    PHP MySQL Delete DELETE 语句用于从数据库表中删除行. 删除数据库中的数据 DELETE FROM 语句用于从数据库表中删除记录. 语法 DELETE FROM table_na ...

随机推荐

  1. Doc-Compose

    一.安装sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s ...

  2. PhpStorm For Mac 安装使用及 Php 开发的 ‘Hello World’

    PHP全称为:Hypertext Preprocessor,中文名为:『超文本预处理 器』是一种通用开源脚本语言,主要用于Web应用开发(俗称做网站或 者做后台!) 编译软件:PHPStorm for ...

  3. 洛谷P2142 高精度减法 题解

    想找原题请点击这里:传送门 原题: 题目描述 高精度减法 输入格式 两个整数a,b(第二个可能比第一个大) 输出格式 结果(是负数要输出负号) 输入输出样例 输入 复制 输出 复制 说明/提示 %数据 ...

  4. 解决 Anaconda 3.7更新出现CondaHTTPError与SSLError

    1.问题描述: An HTTP error occurred when trying to retrieve this URL. HTTP errors are often intermittent, ...

  5. python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)

    问题描述 今天在写爬虫爬取影评时,本来的思路把影评的标题作为文件名,将每个影评的详情内容写入到"标题.txt"文件中,直到我遇到了这个问题: 这时我突然意识到,文件名中有些字符是不 ...

  6. 前端学习 之 JavaScript DOM 与 BOM

    一. DOM介绍 1. 什么是DOM? DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构. 目的其实就是为了能让js操作html元素而制定的一个规范. DOM就 ...

  7. 微信小程序 列表倒计时

    最近要实现一个列表倒计时的功能,写了个demo 展示图 <view class="center colu"> <view class="time&quo ...

  8. 并发编程之GIL

    目录 GIL 什么是GIL锁 为什么需要加锁 带来的问题 如何解决 关于性能的讨论 计算密集型任务:进程执行更快 IO密集型:线程执行更快 自定义锁与GIL的区别 GIL 什么是GIL锁 官方解释: ...

  9. 学习不一样的vue5:vuex(完结)

    学习不一样的vue5:vuex(完结)  发表于 2017-09-10 |  分类于 web前端|  |  阅读次数 4029 首先 首发博客: 我的博客 项目源码: 源码(喜欢请star) 项目预览 ...

  10. node.js绑定监听事件EventEmitter类

    Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下: // 引入 events 模块 var events = r ...