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