Sql如何删除重复记录
类别:数据库 浏览量:600
时间:2014-6-25 Sql如何删除重复记录
Sql如何删除重复记录一、Sql产生重复记录的原因
1、完全重复的记录
完全重复的数据,通常是由于没有设置主键/唯一键约束导致的。
2、部分重复的记录
部分列重复的数据,通常表上是有主键的,可能是程序逻辑造成了多行数据列值的重复。
二、Sql删除重复记录的方法
1、删除完全重复的记录
(1) 借助临时表
利用DISTINCT得到单条记录,删除源数据,然后导回不重复记录。
如果表不大的话,可以把所有记录导出一次,然后truncate表后再导回,这样可以避免delete的日志操作。
例如
if OBJECT_ID('tempdb..#tmp') is not null
drop table #tmp
GO
select distinct * into #tmp
from duplicate_all
where c1 = 1
GO
delete duplicate_all where c1 = 1
GO
insert into duplicate_all
select * from #tmp
(2) 使用ROW_NUMBER
with tmp
as
(
select *,ROW_NUMBER() OVER(PARTITION BY c1,c2,c3 ORDER BY(getdate())) as num
from duplicate_all
where c1 = 1
)
delete tmp where num > 1
(3)、如果多个表有完全重复的行,可以考虑通过UNION将多个表联合,插到一个新的同结构的表,SQL Server会帮助去掉表和表之间的重复行。
2、删除部分重复的记录
(1) 唯一索引
唯一索引有个忽略重复建的选项,在创建主键约束/唯一键约束时都可以使用这个索引选项。
例如
if OBJECT_ID('tmp') is not null
drop table tmp
GO
create table tmp
(
c1 int,
c2 int,
c3 varchar(100),
constraint UQ_01 unique(c2,c3) with(IGNORE_DUP_KEY = ON)
)
GO
insert into tmp
select * from duplicate_col
select * from tmp
(2) 借助主键/唯一键来删除
通常会选择主键/唯一键的最大/最小值保留,其他行删除。以下只保留重复记录中c1最小的行。
delete from duplicate_col
where exists(select 1 from duplicate_col b where duplicate_col.c1 > b.c1 and (duplicate_col.c2 = b.c2 and duplicate_col.c3 = b.c3))
--或者
delete from duplicate_col
where c1 not in (select min(c1) from duplicate_col group by c2,c3)
(3) ROW_NUMBER
with tmp
as
(
select *,ROW_NUMBER() OVER(PARTITION BY c2,c3 ORDER BY(getdate())) as num
from duplicate_col
)
delete tmp where num > 1
select * from duplicate_col
标签:Sql
您可能感兴趣
- windows下mysql密码重置(Windows10系统下Mysql8.0.13忘记root密码的操作方法)
- mysql时间存储如何选择(MySQL如何使用时间作为判断条件)
- sql查询过程解析(SQL 联合查询与XML解析实例详解)
- 启动sqlserver代理服务失败(SQL Server代理服务无法启动怎么办)
- mysql的常见优化(详解GaussDB for MySQL性能优化)
- mysql中null的用法(为什么mysql字段要使用NOT NULL)
- centos安装mysql8.0教程(Centos7 安装 Mysql8教程)
- mysql优化使用方法(详解Mysql函数调用优化)
- MySQL中查询数据库的大小
- mysql的使用步骤(MySQL infobright的安装步骤)
- mysql图形化管理工具
- mysqlexplain解析(Mysql explain用法与结果深入分析)
- sqlserver怎么加check约束(浅析SQL Server的分页方式 ISNULL与COALESCE性能比较)
- django连接mysql不支持中文插入(Django创建项目+连通mysql的操作方法)
- sqlserver连接字符串函数(SQL SERVER 2012新增函数之字符串函数FORMAT详解)
- SQL SERVER数据库状态
- 书法欣赏 宋.志南诗《绝句》(宋.志南诗绝句)
- 每周一首古诗 《绝句》(每周一首古诗绝句)
- 蓝色代表什么(蓝色代表什么性格的人)
- 红色代表什么(红色代表什么情感和含义)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9