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
只在哪里(选择只从简历组只