|
楼主 |
发表于 2008-2-7 12:38:00
|
显示全部楼层
回复: 检索并删除数据库里的重复记录
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断: j& E) i! l7 @4 D* Z) x! G
select * from people" u* h# `' z8 M7 Q3 E
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
5 y, y3 G2 C/ W; R& Ndelete from people
9 N8 I K' @0 J; j# Z- mwhere peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)4 J4 K: o+ ~- K3 E
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)3、查找表中多余的重复记录(多个字段) : Q$ _! V. r: e/ |' |0 p
select * from vitae a( [1 R5 ~# J2 i2 m: a* E& g6 Z
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录% F8 H* K. f2 D" ~$ x2 Y% D! R
delete from vitae a
4 X/ r: B- h$ ^ jwhere (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)8 a& [9 @% B% R+ o# b( S" R6 D
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 c" ^+ S/ l2 D( x
select * from vitae a9 A' F3 X1 L1 s) O1 [
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)5 ]$ q: s, g( @- j! B$ p2 } l
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)% o' O! ~' q) K2 S( k
(二) \* k. m+ l9 O, ?, k! u7 V( A
比方说+ t. W+ `% V* M
在A表中存在一个字段“name”,
- W; Q `4 M5 l% j- ~ t( C: y6 L而且不同记录之间的“name”值有可能会相同,
2 X0 B, }& s7 Y现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;9 L1 t9 ~, j) ~! Q6 V
Select Name,Count(*) From A Group By Name Having Count(*) > 1如果还查性别也相同大则如下:
9 Q( ^* I' L* o+ fSelect Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1 |
|