a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 120|回复: 0

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

[复制链接]
发表于 2012-3-18 16:43:48 | 显示全部楼层 |阅读模式
下面是删除sql数据库中的重复数据的一些方法
& o  x$ @2 m. j. m, T5 S- M. I方法一
' j2 @( l6 \7 s) C8 u; gdeclare @max integer,@id integer
2 X' h# }3 K+ D3 X5 e/ Pdeclare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 18 l, q" F3 v, b. n: O9 |
open cur_rows
" B9 s3 k2 _) R( lfetch cur_rows into @id,@max6 R9 K; |- l- Z) j
while fetch_status=0
6 a' m$ n: q) [0 Ibegin$ Y( u+ \/ P' Z% S1 H3 t
select @max = @max -1
* b' L7 G; s# m2 F) x! Nset rowcount @max( l( Y' g; ], v- @2 U; e9 ?
delete from 表名 where 主字段 = @id% R0 n. b3 U: p. f/ K) t
fetch cur_rows into @id,@max
  r" T( @$ s! T0 [. xend
, X5 }2 ^" C& O* G( K/ a4 s+ @close cur_rows$ ]3 f5 `9 _! ~- c
set rowcount 0
. l8 {* p% z% L' A9 w/ f) W5 {方法二; M+ @. j7 ~0 A
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
0 h" _$ A! T( O" `8 x! W" x; S1、对于第一种重复,比较容易解决,使用
! R+ T, b- L: Aselect distinct * from tableName
8 }" T- S% h7 Q: f& v6 H3 e1 ]就可以得到无重复记录的结果集。
) x- k2 V/ S; k$ E8 J% T( ~如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
0 ?, E) a7 t: J+ e  {; G; Tselect distinct * into #Tmp from tableName4 |4 B% ]  M# j' b& c. D
drop table tableName$ J4 r/ [$ _7 ?4 Q2 K
select * into tableName from #Tmp% v5 a3 n) V0 Y6 z0 g
drop table #Tmp# N4 T, ]' p1 ~7 v- E
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。. l; d7 m$ [) q! N: h  y
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
/ R5 f6 z. X: H5 J7 e假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
1 ?8 ~$ y- M( Z2 T  uselect identity(int,1,1) as autoID, * into #Tmp from tableName2 p5 U8 g, J7 y, `# b
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
6 u2 ?% @7 S- n1 [8 H+ L6 lselect * from #Tmp where autoID in(select autoID from #tmp2)2 g( j  V- b5 N- n+ ?& I
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 18:00 , Processed in 0.332838 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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