a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 125|回复: 0

[电子商务员] 删除sql数据库中的重复数据

[复制链接]
发表于 2012-3-18 16:43:48 | 显示全部楼层 |阅读模式
下面是删除sql数据库中的重复数据的一些方法
( B; ^, n' J* G' ?9 H( i方法一
* c* v- ]  t- d' P* Vdeclare @max integer,@id integer
5 J- L7 T- _, {  a6 edeclare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1, [7 D. i6 m1 P9 }
open cur_rows
/ A. n8 B/ J  O5 o& L% c: c! }fetch cur_rows into @id,@max+ C5 F1 z: m9 p8 d" }
while fetch_status=0! g! ~$ S4 ~& G- e: n* w
begin2 e2 K8 E" E% Q2 w
select @max = @max -1
; N- Y) C! R1 T% iset rowcount @max
" `2 q3 ?6 a4 Adelete from 表名 where 主字段 = @id
  b0 M5 m" w6 Cfetch cur_rows into @id,@max
* [! {4 s' ~  a' {4 L! r$ E2 f" Oend& Q3 b7 `0 F5 V! o$ g$ m
close cur_rows
- u) V; N) l* v$ z. `1 ~# k: k7 Iset rowcount 0* s/ E5 V8 C  G/ h" X( n' j
方法二
5 Q: C1 x: b4 f有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
3 H9 H1 N1 E. T1、对于第一种重复,比较容易解决,使用5 ?0 M; C! n+ Q  }; Z. @
select distinct * from tableName
& |. ?) f' T+ G# E1 c就可以得到无重复记录的结果集。2 U' G( ^2 f9 m, k) ?
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
* ^: `, u% g2 oselect distinct * into #Tmp from tableName: Q: H- e& O* ?) l5 \2 f4 b
drop table tableName
% q' Y3 z$ s$ a# d. sselect * into tableName from #Tmp
, Z6 g( ]0 @( E8 U: G( mdrop table #Tmp4 ?& T4 w/ D' D6 }$ Y7 G4 t: p" ^
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。: J7 D. X; h9 U
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下! b! W0 R  A# i1 _+ d- L
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
  D/ t2 U, R$ E+ U$ ?/ s% |select identity(int,1,1) as autoID, * into #Tmp from tableName
0 W+ ?% p% R2 E, wselect min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
$ k& p* R- l! hselect * from #Tmp where autoID in(select autoID from #tmp2), P3 N7 J6 r& C6 Z# \' ?$ l' F# `9 V3 m
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-17 08:15 , Processed in 0.141949 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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