Microsoft Access 掲示板

重複レコードを1つ残して、他を全て削除(SQL)

3 コメント
views
4 フォロー

標題の件について質問させてください。

あるテーブルに対し、ユニークな属性はAutoNoのみがあります、
属性は約20フィールド程度ですが、AutoNo以外の属性が完全に一致する
重複レコードを1つ残して(例えばAutoNoが最小値)、他のレコードを全て削除するSQL
をご教授いただけますと幸いです。

VBAにて、currentDb.execute strSQL, dbFailOnErrorで実行したいと思っています。

よろしくお願いします

haruki
作成: 2023/07/17 (月) 18:47:07
通報 ...
1
りんご 2023/07/17 (月) 19:29:56 935bc@0e907

AutoNo以外の属性が完全に一致する重複レコードを1つ残して

要するに、AutoNo以外の属性の組み合わせの重複を認めない。AutoNo以外の属性を集めたテーブルを作って、全部に主キー制約をかけておく。あとは標題のレコードをループ処理で移行するような処理を考えれば?

2

情報が不足しているので、下記のようだと仮定して、回答します。

テーブル名 あるテーブル
フィールド名 AutoNo, F1, F2, F3, F4, F5

AutoNo以外のフィールドはテキスト型とします。
下記のような削除クエリを作成して実行すればいいでしょう。

DELETE *
FROM あるテーブル
WHERE AutoNo>DMin("AutoNo","あるテーブル","F1='" & [F1] & "' AND F2='" & [F2] & "' AND F3='" & [F3] & "' AND F4='" & [F4] & "' AND F5='" & [F5] & "'");

 
VBAならば、
 

Dim strSQL As String
strSQL = "DELETE * FROM あるテーブル " & _ 
"WHERE AutoNo > DMin(""AutoNo"",""あるテーブル"",""F1='"" & [F1] & ""' AND F2='"" & [F2] & ""' AND F3='"" & [F3] & ""' AND F4='"" & [F4] & ""' AND F5='"" & [F5] & ""'"");"
currentDb.execute strSQL, dbFailOnError
3
haruki 2023/07/19 (水) 14:03:13 b5deb@a9108

ご回答ありがとうございます。

なるほどです。DMinを使うのですね。
勉強になりました。解決いたしました。