用SQL删除重复数据的详细方法

用SQL删除重复数据的详细方法
1。删除完全重复的记录

完全的数据重复通常是由于没有一组主键/唯一键约束造成的。
测试数据:
复制代码代码如下所示:
如果object_id('duplicate_all)是无效的
duplicate_all表

创建表duplicate_all

C1 int,
C2 int,
C3 varchar(100)


插入duplicate_all
选择1100,'aaa'union所有
选择1100,'aaa'union所有
选择1100,'aaa'union所有
选择1100,'aaa'union所有
选择1100,'aaa'union所有
选择2200,'bbb'union所有
选择3300,'ccc'union所有
选择4400,'ddd'union所有
选择5500,'eee

(1)借助临时表

使用显式获取单个记录,删除源数据,然后返回非重复记录。
如果表不大,可以一次性导出所有记录,然后再次对截断表进行重定向,从而避免删除日志操作
复制代码代码如下所示:
如果object_id('tempdb .. # TMP的)不为空
表# TMP

选择不同的*为# TMP
从duplicate_all
其中C1=1

删除duplicate_all C1 = 1

插入duplicate_all
SELECT * FROM # TMP

(2)使用row_number
复制代码代码如下所示:
TMP
作为

SELECT *,row_number(超过(C1,C2),C3为分区(getdate()))为顾问
从duplicate_all
其中C1=1

删除编号为1的TMP
如果多个表具有完全重复的行,可以考虑通过联合连接多个表,以插入一个新的相同结构表。SQLServer有助于删除表和表之间的重复行。

两。删除部分重复记录

重复数据的部分列,通常带有主键,可能是程序逻辑导致多行数据列值被重复。
测试数据:
复制代码代码如下所示:
如果object_id('duplicate_col)是无效的
duplicate_col表

创建表duplicate_col

主键,
C2 int,
C3 varchar(100)


插入duplicate_col
选择1100,'aaa'union所有
选择2100,'aaa'union所有
选择3100,'aaa'union所有
选择4100,'aaa'union所有
选择5500,'eee

(1)唯一索引

惟一的索引有一个忽略重复的选项,当创建关键键约束/唯一键约束时可以使用此索引选项。
复制代码代码如下所示:
如果object_id('tmp)是无效的
删除表TMP

创建表的TMP

C1 int,
C2 int,
C3 varchar(100),
约束uq_01(C2、C3)和独特的(ignore_dup_key =对)


插入TMP
SELECT * FROM duplicate_col
从TMP中选择*

(2)删除主键/唯一键
主键/唯一键的最大最小值通常被选中,而其他行则被删除。
复制代码代码如下所示:
删除从duplicate_col
在存在(选择1 duplicate_col在哪里duplicate_col.c1 > b.c1和(duplicate_col.c2 = b.c2 = b.c2))


复制代码代码如下所示:
删除从duplicate_col
其中C1不在(选择min(C1)从duplicate_col组C2)

如果希望在复制记录中保持n行,可以引用数据包中的5行。
(3)row_number
它与删除完全复制的记录基本相同。
复制代码代码如下所示:
TMP
作为

SELECT *,row_number()(C2、C3级以上的分区(getdate()))为民
从duplicate_col

删除编号为1的TMP
SELECT * FROM duplicate_col
SQL删除重复数据只有一个(以下代码,很多用户的反馈错误,更多的人测试)

使用SQL语句,只有一个重复项被删除。
在成千上万的记录中,有一些相同的记录。如何用SQL语句删除重复
1。查找表中多余的重复记录,并重复记录是由一个单一的现场判断(只)
从人群中选择*
只在哪里(选择只具有数从人组只(> 1))
2。删除表中多余的重复记录。重复记录是由一个单一的现场判断(只),只有最小的rowid记录。
删除的人
在那里peoplename(选择peoplename从人群的peoplename具有计数(> 1))
和只不在(选择最小(只)从人组peoplename)
三.查找表中多余的重复记录(多个字段)
从简历中选择
在(a.peopleid,a.seq)在(选择只,SEQ表组只,*)> 1)
4。删除多余的重复记录(多个字段)表中,只有最小的rowid记录
删除个人简历
在(a.peopleid,a.seq)在(选择只,SEQ表组只,*)> 1)
和ROWID不(选择min(rowid)只表组。
5。找到多余的重复记录(多个字段)表中,而不包含最小的rowid记录
从简历中选择
在(a.peopleid,a.seq)在(选择只,SEQ表组只,*)> 1)
和ROWID不(选择min(rowid)只表组。
6。消除场地左侧的第一位:
更新表{标题} =权集({标题}(Len({标题})1)在标题)像村%。
7。消除场地右侧的第一位:
更新设置{标题} =左表({标题}(Len({标题})1)在标题村)
8。多余的重复记录(多个字段)在误删除表,其中不包含rowid最小的记录
更新简历的设置则通不过= - 1
只在哪里(选择只从简历组只
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部