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

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

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

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

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

×
conn.execute("delete from table where id not in (select distinct from table)")" Q; i% f- v5 u& I/ T: t 文件删除函数 <% 4 d" \" Y; c! H% t% ~3 f '文件删除函数 * O. f* V g/ Q9 zfunction deletefile(filename) # Q6 [ L3 S1 T- g. J if filename<>"" then 2 K' x* p) F; E6 h: f: ?' @ set fso=server.CreateObject("scripting.filesystemobject") - v5 d* Y9 W7 Y" Fif fso.FileExists(filename) then 4 `% C; e. i. M$ Pfso.DeleteFile filename ' R! }* t; c1 N0 v2 {5 b% u' jelse % K: E6 S9 A3 R6 f. b" O: CResponse.Write "<script>alert(’该文件不存在’);</script>" / f- C: J- s5 O end if # V5 I- l0 w8 B8 N9 o. r, s8 { end if ! |2 w3 F9 o5 {0 E end function ( T- `) D* z2 A5 Q4 @# h9 Y# ]% f7 ]; r; M( ^" K0 S strfile=server.MapPath("fileName") ; H) h3 O8 m3 }1 ~ deletefile(strfile) % f, j" \& _9 }8 ]/ | %>
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-2-7 12:38:00 | 显示全部楼层

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

 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断% l' e$ e: }6 E4 N1 ], u/ W select * from people! V- l& U2 J# r' b1 n where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 ; X. r: K8 ~. E/ G; B8 Q/ U6 adelete from people 2 d( W6 o: R- g O0 G9 G where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)0 V$ K1 a9 q M$ d3 d- f: o# C and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)3、查找表中多余的重复记录(多个字段) " Z: Z' E( {! `' Aselect * from vitae a* A1 G0 |% P2 L+ |) V6 N where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 ! C8 U) F8 |2 W$ O, z/ K: ]1 x' Cdelete from vitae a % d" P4 ]2 y1 y) R4 uwhere (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) " \; r, ?0 Y. `# b/ ~5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录. k4 ?2 {- l) c- q9 X ] select * from vitae a' w5 h+ F2 g: o! B where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) ( t5 G( q" B% Hand rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) . b& A$ s1 [# ^" a* u' M* O(二) 0 ]/ B: u! Z# K( D! [( W比方说 ' _$ u* |3 l% S5 U O. k在A表中存在一个字段“name”,! m! \( I* {/ m- i 而且不同记录之间的“name”值有可能会相同,- V( O7 k9 s3 y- |% u 现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;9 V9 J2 F( c, S. R Select Name,Count(*) From A Group By Name Having Count(*) > 1如果还查性别也相同大则如下: 3 e; Z) V9 U+ O; q1 I7 F5 e6 y vSelect Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

(三)0 c$ w6 p7 d' e7 A' R! w& {/ i 方法一; A8 `; u W9 z O# T9 S . _2 U& A7 z* M. ?) [" y declare @max integer,@id integer4 M8 R8 [, p& f% V7 s$ _* B . Y7 W3 H$ |& G5 I( X/ K& h declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1) T$ G& G( `2 J4 l; K . c! k0 l$ P: e7 t) [ open cur_rows 6 _6 w/ k! n! ?( u6 d/ f2 _, n" Z% H3 x& H3 l7 B( ` fetch cur_rows into @id,@max, K% Z5 G9 K7 g 7 q! t; m) \6 F! j* h D# G2 X while @@fetch_status=0& L6 ?0 {0 Y$ g6 Y* k# V u+ ]- ] 4 Y2 [! g$ X: {) _2 l2 u begin 6 ~$ k0 Q4 ?7 o* Q! P5 z! Y. }9 S+ `) t select @max = @max -1$ z* W! P9 t' Q 9 m6 {) g1 }. b. W set rowcount @max A( p: s) R1 B; \- _5 `0 U 2 _! T: i9 C8 Y. J6 gdelete from 表名 where 主字段 = @id k7 P: f$ p/ G M0 X; L4 u9 ] ; n, b h0 K+ d+ T/ x fetch cur_rows into @id,@max 4 M S: Y1 T+ n" @( y8 ?9 pend ) Z7 K; G" I. [/ r9 M7 ^7 a. | H; P, M close cur_rows ( A1 M' C2 @" V1 H7 F( I$ W 2 z s1 G9 g- {; ~& l, B) D0 V1 Bset rowcount 0 ( a! S) |) I7 A7 a ; V7 u% N0 h$ ~方法二 8 P3 q9 {2 {$ N4 j 1 t7 i& Y! d: Y0 C& J9 A"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。4 b+ @* t* j7 f/ [ m k 3 C" C5 E% c: Z; ~  1、对于第一种重复,比较容易解决,使用: z! [7 ]% L/ i2 g+ b$ o " ^* L0 Z. T1 G' k select distinct * from tableName 2 n6 B+ D0 L) T* N7 k) f5 ^, a. U# x ]$ {' H   就可以得到无重复记录的结果集。! [6 h) Z/ |4 [" P3 L4 R ; A& }5 Z, G) x; U  如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除/ C6 c0 @8 O0 h. q {5 ]* _ 5 }& y, J7 ^! h, y1 o& Y4 J select distinct * into #Tmp from tableName ; l6 W0 f/ n9 c# t ! G2 e% O9 D- sdrop table tableName + y4 q, N! i& P C/ R0 c' j2 F1 `/ b' B- Y! C; T; Z; I; B3 J7 J select * into tableName from #Tmp 6 w& R, c0 L( Z& D* J8 I* ~ 0 P# t. \! r& d4 R. ~6 sselect id from tablename 5 m0 x- W3 M$ @: q; C, `3 z: | 3 Q1 z" A& z* i' N3 R [group by id 9 |" p( o8 @8 U% m+ p8 b" k0 i& A% w' F, l having count(id) > 1 " l$ [7 _% ]7 u5 g+ t& j- H # B5 K2 ]9 K# ]' n7 E)
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-2-22 16:55

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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