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