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

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

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

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

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

×
conn.execute("delete from table where id not in (select distinct from table)") ; O, k. k: [2 m. D文件删除函数 <% . ?1 I+ }4 Q; y0 y& Z! @, y7 a: b '文件删除函数 0 P3 Y9 b) ?( z) y2 Sfunction deletefile(filename) / N( l7 \) d. b n3 k" Y: Y if filename<>"" then ( Z) `2 B+ J. I6 @5 D$ m+ }set fso=server.CreateObject("scripting.filesystemobject") 0 z' M) w& x. @, ], z m' i if fso.FileExists(filename) then ( ?: j, Z$ c% \2 P6 b# tfso.DeleteFile filename 5 H8 y$ y. ~; R, U9 t1 F else , {. ~( _, J5 ?3 n5 c8 S R Response.Write "<script>alert(’该文件不存在’);</script>" $ a U& b; q, f end if 7 e$ I: d& F2 R: \4 fend if & n7 m& v9 V* zend function ; r, J8 t/ y$ F: i! A& g; {" u1 y 0 P9 W {: b6 |strfile=server.MapPath("fileName") # F1 s ?9 a9 W+ \+ b- L deletefile(strfile) 4 A2 T3 u7 i5 l) B, W%>
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-2-7 12:38:00 | 显示全部楼层

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

 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断7 W+ i0 }( Z$ u' n5 `8 ? select * from people: R4 l% r. E. Y; L1 z+ h9 q# y where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录' @1 `0 y, J& e; Z& I1 W" w1 j delete from people 4 {9 v- G# t! `4 ?7 n: A- R) ~ where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)# ~( q% B* i' o: d: b: f and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)3、查找表中多余的重复记录(多个字段) . d' z- r6 Y, l+ qselect * from vitae a h/ t0 Z# m. C2 \6 |3 Swhere (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 B7 N! T _& @) Z1 S delete from vitae a9 G5 ~% H! l! U where (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) - w+ ^+ L( L' k5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 ) N+ q6 D0 j" x' V1 t5 pselect * from vitae a : Y6 `" ?* m4 {, }) zwhere (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)' s" P' o, c9 {( j and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) + z* a+ P6 d- {(二)6 I- V* |; Y/ t( f& l( ~' g 比方说 " i0 P2 J0 ?- F在A表中存在一个字段“name”, / a- T: D+ O1 u7 v5 f( z" Q而且不同记录之间的“name”值有可能会相同, ' o$ ~ a) ?& {; x2 l现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项; 3 i/ [4 u8 }4 ]# C3 Z4 [0 PSelect Name,Count(*) From A Group By Name Having Count(*) > 1如果还查性别也相同大则如下: ) ^" H" ?0 Y3 |- R2 ` M: dSelect Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

(三) 0 N. f+ O4 x9 t$ |% N方法一 $ Z, g, J, k. y6 W1 b7 X9 k / H5 X- I k- Kdeclare @max integer,@id integer & f, O% i2 n( W) _* M; l' Y- L- t7 M4 q declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1% E- d& q! k8 n0 Y& A3 F" q8 V ! C' I T3 L; Xopen cur_rows 4 y# W+ A- l+ i/ R* E 1 k8 S7 I! S0 i2 Pfetch cur_rows into @id,@max ' i% y/ N1 e9 B 5 d6 g4 m4 G: i: w/ pwhile @@fetch_status=08 ^4 o. a( K; v5 W6 E7 W 7 y; X. t. U; A1 }9 R% H6 tbegin6 R# v- Y+ n2 |0 c8 B) n6 F 5 P. U5 s7 W b5 @select @max = @max -1' i- e& M& l4 e # f, W; L9 K( P% z* S \8 ]) X3 ^ set rowcount @max; S2 ]1 C4 N3 x9 g) O % o: M& p# d& Y- w1 e! p3 edelete from 表名 where 主字段 = @id2 Q1 @; C ~1 V% R* v3 q! g5 m 9 Z# ^+ E) [3 [# I; F0 W fetch cur_rows into @id,@max ; D8 H! a( H, hend ; o0 b, l9 `' A+ T8 @ ! W" d9 H: g3 Y( C( j8 X" pclose cur_rows) x. _4 w8 F2 ? W; _; l+ D - E8 t9 B; {' c/ T' C set rowcount 0 , w) `+ B3 j W! g6 m" E* S* ^" G* J. \+ ?2 T8 g 方法二 3 I8 E& s. j4 [4 Y& g7 ] A 3 h4 K0 s. i4 y% F# \. V" W"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。0 K2 H5 S! x p+ H* \ 4 l Y9 X" [+ V" \2 I7 b/ i   1、对于第一种重复,比较容易解决,使用 ; b, T4 q( f! `; q% W0 }4 ~" r$ S8 K) Q) I; E5 h select distinct * from tableName - X( a' T" @+ t# y8 ?; C' H/ J/ |& u' E" ?8 D3 }   就可以得到无重复记录的结果集。 ) I9 j* y3 ?4 T( @: k* R7 n" H" @( C9 b, n, ^8 e; }   如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除( J8 q" d2 P" x5 t% L% l: O( C # e# x% e9 E# O7 e- [) a select distinct * into #Tmp from tableName2 v, V( d7 a8 K& u& a 7 c, f) }! c: x" G9 _ Sdrop table tableName2 K# f# \9 p) W " @* K- t5 Q$ @% K) Dselect * into tableName from #Tmp 1 p+ l* ^0 L& Q9 P& x9 ~* R* Q9 E# C/ q% E/ e' y select id from tablename 1 x/ }$ [3 f# K' ` " c7 b2 l' g, A( mgroup by id : @3 e" B' _0 _* a( C$ f! s: ^( @1 G7 d/ ^% {" ]" K. D! P having count(id) > 1 Z1 R) l1 o* w! c- l) V8 f Y- L 2 V- ]: z' E" j% x)
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-10-25 03:49

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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