|
楼主 |
发表于 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 |
|