WEB开发网
开发学院数据库MSSQL Server 存储优化 - 删除重复记录只保留单条 阅读

存储优化 - 删除重复记录只保留单条

 2010-03-24 00:00:00 来源:WEB开发网   
核心提示: 如果理解了这个思路,那么数据库中的处理就好办了,存储优化 - 删除重复记录只保留单条(2),我们可以做一个临时表来解决问题1selectdistinct*into#TmpfromtableName2droptabletableName3select*intotableNamefrom#Tmp4d

如果理解了这个思路,那么数据库中的处理就好办了。 

我们可以做一个临时表来解决问题

1 select distinct * into #Tmp from tableName 
2 drop table tableName 
3 select * into tableName from #Tmp 
4 drop table #Tmp 

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

但是你说了,我不想增加任何字段,但这时候又没有显式的标识列,怎么取出标识列呢?(可以是序号列,GUID,等)

上个问题先不讲,先看看这个问题。

我们分别在三种数据库中看一下处理办法,就是通常我们用的Sqlserver2000,Sqlserver2005,Oracle 10g.

1.   SQL Server 2000 构造序号列

方法一:
SELECT 序号= 
  (SELECT COUNT(客户编号) FROM 客户 AS a WHERE a.客户编号<= b.客户编号), 
  客户编号,公司名称 FROM 客户 AS b ORDER BY 1;
方法二:
SELECT 序号= COUNT(*), 
a.客户编号, a.公司名称 FROM 客户 AS a, 客户 AS b 
WHERE a.客户编号>= b.客户编号 GROUP BY a.客户编号, b.公司名称 ORDER BY 序号;

2.   SQL Server 2005 构造序号列 

方法一:
SELECT RANK() OVER (ORDER BY 客户编号 DESC) AS 序号, 客户编号,公司名称 FROM 客户;
方法二:
WITH TABLE AS 
   (SELECT ROW_NUMBER() OVER (ORDER BY 客户编号 DESC) AS 序号, 客户编号,公司名称 FROM 客户)
SELECT * FROM TABLE
WHERE 序号 BETWEEN 1 AND 3;

Tags:存储 优化 删除

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接