设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1776|回复: 0

精确查找可以插入重复记录的表,解决记录重复的问题

[复制链接]

32

主题

313

金钱

473

积分

入门用户

发表于 2019-5-14 15:39:14 | 显示全部楼层 |阅读模式

本文介绍处理重复数据的处理方法。

1.找出可以插入重复数据的表
use [你要处理的数据库]

select id,name from sysobjects where id in(

SELECT object_id FROM sys.indexes where object_id not in(

SELECT object_id FROM sys.indexes where is_unique=1 or is_primary_key=1 or is_unique_constraint=1)

) and xtype=’U’ order by name

c-users-qintl-appdata-roaming-tencent-users-12869-18.png
再次过滤出哪些表存放有数据
  1. SELECT object_name (i.id) TableName,

  2. rows as RowCnt

  3. FROM sysindexes i

  4. INNER JOIN sysObjects o

  5. ON (o.id = i.id AND o.xType = ‘U’)

  6. WHERE indid < 2 and RowCnt>0 and i.id in(

  7. select id from sysobjects where id in(

  8. SELECT object_id FROM sys.indexes where object_id not in(

  9. SELECT object_id FROM sys.indexes where is_unique=1 or is_primary_key=1 or is_unique_constraint=1)

  10. ) and xtype=’U’

  11. )

  12. ORDER BY RowCnt desc
复制代码

1.png

2.处理重复数据的表,使相同记录只留一条

案例处理:重复数据处理测试.dbo.UA_Log_Ex 表有记录 520714条
2.png
去重查询方法:
USE [重复数据处理测试]

GO

SELECT [cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

FROM 重复数据处理测试.dbo.UA_Log_Ex

group by

[cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]


把所有字段用group by 就能过滤出唯一的记录
3.png
看处理后,记录数量减半,数量为260357条

把过滤后的记录插入一张临时表重复数据处理测试.dbo.TempTable,这个表会自动生成

USE [重复数据处理测试]

GO

SELECT [cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

into 重复数据处理测试.dbo.TempTable

FROM 重复数据处理测试.dbo.UA_Log_Ex

group by

[cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

结果如下 :
4.png
最后一步,把原表数据清空,把重复数据处理测试.dbo.TempTable表数据搬回来

delete FROM [重复数据处理测试].[dbo].[UA_Log_Ex] –删除原表数据
5.png
把数据从重复数据处理测试.dbo.TempTable表数据搬回来

insert into [重复数据处理测试].[dbo].[UA_Log_Ex]

SELECT [cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

FROM [重复数据处理测试].[dbo].[TempTable]

6.png
查看结果:
7.png

到此就处理结束了
总结
过滤重复记录查询用 group by 所有字段
把过滤结果插入新临时表 into Temptable
清除原表数据 delete from table
把临时表数据搬回原始表,用 insert into 原表

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表