T-SQL删除重复数据
2016-01-14 09:22
323 查看
数据重复分为两种情况:一种是每个字段都相同的完全重复,第二种是部分字段重复的结果集。比如Name字段重复,而其他字段不一定重复或者重复可以忽略。
第一种情况比较容易解决,使用select distinct * from tableName就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留一条),可以按一下方法删除:
2、第二类重复问题通常要求保留记录中的第一条记录,操作方法如下:
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
方法二
第一种情况比较容易解决,使用select distinct * from tableName就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留一条),可以按一下方法删除:
select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp
2、第二类重复问题通常要求保留记录中的第一条记录,操作方法如下:
--假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集 select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
方法二
declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set rowcount @max delete from 表名 where 主字段 = @id fetch cur_rows into @id,@max end close cur_rows set rowcount 0
相关文章推荐
- SymmetricDS 数据库双向同步开源软件入门
- 实时数据库与关系数据库的对比分析
- MySQL主从复制配置
- Mac sqlite管理工具
- xcode4.3.2 使用sqlite3的准备
- oracle表空间查询维护命令大全之三(暂时表空间)史上最全
- 实时/历史数据库和关系型数据库的区别
- mysql与oracle区别
- 本地ORACLE忘记SYS用户密码解决方法
- listener.ora、sqlnet.ora、tnsnames.ora
- with as --工作备忘2016/1/13
- SQL SERVER性能优化综述
- 在xcode项目中加入.sql文件,并用代码执行sql语句,省去在程序中调用sqlite3或者fmdb的接口来调用
- SQL Server Profiler:使用方法和指标说明
- ORACLE-020:ORACLE技巧002 批量操作表
- oracle安装问题_操作系统
- oracle查询表信息
- Linux下重启oracle
- SQL Server 字符串拼接与拆分 string varchar Split and Join
- mysql-5.6.24源码包编译安装