找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 1721|回复: 2

检索并删除数据库里的重复记录

[复制链接]
发表于 2008-2-7 12:15:00 | 显示全部楼层 |阅读模式

登录后查才能浏览下载更多咨询,有问题联系QQ:3283999

您需要 登录 才可以下载或查看,没有账号?入住遨海湾

×
conn.execute("delete from table where id not in (select distinct from table)")& s$ S4 x) Q. @8 J! _0 k 文件删除函数 <% : S7 Y ~& k- q '文件删除函数 ! Y" T' \# r( K1 _ function deletefile(filename) / i* W+ e& \0 _6 g4 `9 M) e if filename<>"" then 4 t- `0 |. q8 k/ {. e set fso=server.CreateObject("scripting.filesystemobject") ! Z' y0 W, t8 M: q4 W. } if fso.FileExists(filename) then : o- D; w; v! e9 E" z fso.DeleteFile filename 5 K5 s2 H g8 \/ z7 \: t6 x else ! ?9 c L, s4 x# `/ u* k" r; S Response.Write "<script>alert(’该文件不存在’);</script>" ) b5 s' _1 W, X( J# b. Q end if @+ i% o5 v9 p; mend if & S. ^2 I N9 S4 A8 n7 m! Q* v% ]) \end function . u# m% }/ L5 J9 v* k% x2 p" j8 L4 g" r/ B, P" [3 }6 ]* a; r strfile=server.MapPath("fileName") 5 X9 b/ H+ p* R( f. a# N3 Hdeletefile(strfile) ' C7 g: Q6 e5 K$ A9 a %>
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-2-7 12:38:00 | 显示全部楼层

回复: 检索并删除数据库里的重复记录

 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 ( ?+ {! w# N* S: G2 n; hselect * from people6 a' X# N& m" _$ g where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 6 ]7 @2 _2 M' |/ M) H( K2 Kdelete from people : K' z$ Y( ~- u( F' r where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) + a1 d5 y9 t% D5 r! V8 [8 ]and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)3、查找表中多余的重复记录(多个字段) 5 _) d9 O/ ^1 Y" q select * from vitae a $ e5 b% C, ]" i( `1 ywhere (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 7 c) l5 S# w4 G$ h. Fdelete from vitae a , ~1 T0 D. A( B; b7 A2 K4 @" nwhere (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) ' O# c$ F- z- |1 k2 ~' O5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 % l9 l* H( _+ Z( {select * from vitae a$ I: u% A+ h7 E+ M where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 5 e5 L- x+ O& ]and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)/ h1 {6 |7 C6 f3 B- p (二)6 l7 P; T {0 X0 j0 c0 o | 比方说2 m h: ~ [, k7 j3 | 在A表中存在一个字段“name”, . u8 ^; g& j3 J+ \! G" g) e而且不同记录之间的“name”值有可能会相同, W; \* [0 i' {. p- Q. h 现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项; ; F T7 h* D/ v$ Y2 k. RSelect Name,Count(*) From A Group By Name Having Count(*) > 1如果还查性别也相同大则如下: " [( }) ?6 ~2 \Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

 楼主| 发表于 2008-2-7 12:41:00 | 显示全部楼层

回复:检索并删除数据库里的重复记录

(三) 5 Y3 E) g/ e' J4 M7 a方法一 # ]. H! |7 s8 a( p. ~: L e0 O4 N3 Y8 [ declare @max integer,@id integer . }6 o3 {# p* n. |+ r. L0 p. i7 e declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1% \* x: @1 L) {" \4 J+ e* t, z ; R4 h; T8 i* M+ ?open cur_rows) n. d- ^+ J! y# D: X, p ( N0 F$ t) |4 Y1 k fetch cur_rows into @id,@max: \3 D' z$ P% I: y * Q0 f! ^8 f3 W+ W# W. ?1 h% Lwhile @@fetch_status=09 T/ a, s8 o; z- _2 X- X% s " M# E9 a" f4 u$ p& B begin' H P% v5 o/ d: Q9 r $ @! m0 w) Z- Q$ E' J( n: v select @max = @max -12 s0 m; j5 H$ t , F9 }# t- k1 u5 {1 U5 J1 ] set rowcount @max - @- f1 }# q( t. x4 Z8 a$ f& s4 g! J7 F delete from 表名 where 主字段 = @id- a+ M; H! Q/ q: i8 v W- n6 R% P! C8 N6 _fetch cur_rows into @id,@max' J2 ]3 X- P1 l- l5 } end / b `& U2 B W7 [9 E- w) K# ]! S' Y# Y 8 I+ w4 y, u8 `& S3 r. u4 Bclose cur_rows & u% ?7 q- D% S ! G5 f" e+ L& x$ y f, }set rowcount 06 t/ a' ]. j8 f5 r 0 Q. v: a$ c5 H 方法二# [* E# e! q1 V% [: M8 d ( y; S- N m( G$ Y* |1 N+ b"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。 , M2 H8 e& ?- j' s. j8 S/ |2 m 3 t- w6 U5 {+ y; _. h0 p  1、对于第一种重复,比较容易解决,使用6 E" O0 N P& n, @% y) N5 m 0 O/ J; ]* y& Z/ w5 D+ H- Uselect distinct * from tableName0 y! y) t }3 H9 U3 x 6 u1 ?: P1 c! B5 Y: t   就可以得到无重复记录的结果集。 9 _8 V$ H }+ ^5 Y% n8 f# s) `5 C) |4 T4 n, q% y; i* F   如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 " q( _0 i* b: T, D4 ^: Q5 P' Y2 V) ~; ?; |! R) [ select distinct * into #Tmp from tableName . d) J4 i) H1 h) \6 K% c* n" c drop table tableName 7 H% E3 B7 I3 B# U2 `: Y2 Z! X. A2 w; j. h0 b! ^) t9 x8 m% M select * into tableName from #Tmp9 R2 r5 W$ ?( ]. \/ r' Z! s* d! p 3 }; [1 V! c8 ^select id from tablename " `' m% U8 H# `/ T- q, ]8 W( j/ v7 L- h+ V1 D3 z& ]! g group by id - [0 @2 _# i" G. W: j" f: q6 L$ |8 Z# h6 z$ e" [ q; [ ?+ u+ Q having count(id) > 1 9 ]& S1 T& ^: }! @ 4 ^8 ]/ z5 O1 X9 C)
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

网站解决方案专享优惠-3折上云

QQ|手机版|小黑屋|遨海湾超级社区

GMT+8, 2026-3-10 18:15

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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