SQL文で削除して繰り返します。

1688 ワード

数千の記録には同じ記録があります。SQL文で削除して繰り返します。
 
1、検索テーブルに余分な重複記録があり、重複記録は単一のフィールド(peopleId)によって判断されます。
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
 
 
2、表の余分な重複記録を削除し、重複記録は単一のフィールド(peopleId)によって判断し、rowidの最小記録のみを残している。
delete from people 
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
 
 3、検索テーブルの余分な重複記録(複数のフィールド)
 
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
 
4、表の余分な重複記録(複数のフィールド)を削除し、rowidの最小記録のみを残します。
delete from vitae a
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)
 
 5、ルックアップテーブルに余分な重複記録(複数のフィールド)は、rowidの最小記録を含まない
   
select * from vitae a
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)
 
 
   例えば、Aテーブルにフィールド「name」が存在し、異なるレコード間の「name」の値が同じである可能性があります。  今はこの表の各記録の間に「name」の値が重複している項目があるかどうかを調べる必要があります。
Select Name,Count(*) From A Group By Name Having Count(*) > 1