2017-11-05 21 views
1

申し訳ありませんが、私は良い解決策を提示するように見えません。私はオンラインで調査を行っていますが、私の限られた経験で私は私が何であるか把握できませんでした間違っている。 私は重複している600000以上のレコードを持っており、レコードには正確に重複していない他の多くのフィールドがあるため、最大のID番号に基づいて重複を削除する必要があります。助けてください。アクセスの最大IDで重複レコードの削除

サンプルでは、​​私はそれがこの

enter image description here

答えて

2
DELETE 
FROM yourtable AS a 
WHERE a.id NOT IN 
(
SELECT Max(b.id) 
FROM yourtable AS b 
WHERE a.field1 = b.field1 
) 

サブクエリでは、フィールド1の各値の最大IDを選択します。 deleteステートメントは、idが最大ID valeに等しくないfield1の値ごとにすべてのレコードを削除します。

+0

あなたのことは本当にうまくいって、あなたのテーブルの背後にある理由をaとyourtableとして理解しようとしました。したがって、仮想テーブルを作成していて、重複しているが重複していないものを比較しています。 –

+1

仮想テーブルではなく、サブクエリを含むクエリ(bla blaの削除)です。どちらのクエリも、同じテーブルを参照します。今では、サブクエリのWHERE句を使用して1つのテーブル内のデータを比較する場合は、エイリアスを使用する必要があります。それ以外の場合は、同じテーブル内のデータを単純に比較することはできません。私はSELF JOINSを読んでみることをお勧めします。 – Rene

0

のように見える必要があり

enter image description here

を添付これを試してみてください。

Delete from table where ID NOT IN 
(SELECT MAX(ID) FROM TABLE GROUP BY filed1, filed2, filed3 , sourcetable) 
+0

はこれを試みたが、それはあなたが0のレコードを削除しようとしていると重複が dupcombination2から* を削除 削除しません、と言うところIDませ (フィールド1 BY GROUP dupcombination2 FROM MAX(ID) を選択して、フィールド2、IN 、field3、sourcetable) –

1

は、だから何あなたとあなたの例では、言っていることは同じFIELD1と別の行と大きいIDが存在する場合、行が削除されるべきであるということです。 SQLに翻訳その文は次のようになります。

delete from my_table where (field1,id) not in 
(select field1, max(id) from my_table group by field1); 

私はありません:

delete from my_table m where exists 
(select 1 from my_table where field1=m.field1 and id>m.id); 

もう一つの方法は、フィールド1に、各個別の値の最大(ID)を持つものの中ではないすべての行を削除することです2つのうちどちらが読みやすいのか確かめてください。

+0

このSQLでエラーメッセージが表示される "メインクエリのFROM句にEXISTS予約語を使用せずに複数のフィールドを返すサブクエリを作成しました" SQL: delete * dupcombination2 ここで(field1、id)は にありません(select field1、max( id) dupcombination2 グループby field1); –

+0

あなたの最初のメソッドはうまくいったが、2番目のメソッドは失敗した。ただfyi。 –

+0

すべてのデータベースが複数値のINまたはNOT INをサポートするわけではありません。 –

関連する問題