存储优化 - 删除重复记录只保留单条
2010-03-24 00:00:00 来源:WEB开发网如果理解了这个思路,那么数据库中的处理就好办了。
我们可以做一个临时表来解决问题
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;
更多精彩
赞助商链接