Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No2086.重複データ一括削除

タイトル重複データ一括削除
記事No: 2086
投稿日: 2002/10/04(Fri) 17:04
投稿者: M
OS:Win2000
Access Version:XP

初めまして。Mと申します。
基本的なことだと思うのですが、
あるフィールドにあるデータで重複してるものがあります。
(たとえば「氏名」フィールドで同じ氏名の人が複数いる)
その重複してるデータを一括削除するにはどうしたらいいのでしょうか?
(つまり複数あるデータを1つのみ残す)

今まではまず重複クエリで抽出して、重複してるものに手動で印をつけ(チェックボックス)、その印があるもののみを削除クエリで削除してたのですが、
今回は7万件ほどデータがあるので手動でやるのが困難なのです。
恐れ入りますがお教えいただきたく。。。。。

よろしくお願いいたします。

タイトルRe: 重複データ一括削除
記事No: 2087
投稿日: 2002/10/04(Fri) 17:44
投稿者: イケガミ
> あるフィールドにあるデータで重複してるものがあります。
> (たとえば「氏名」フィールドで同じ氏名の人が複数いる)
> その重複してるデータを一括削除するにはどうしたらいいのでしょうか?
> (つまり複数あるデータを1つのみ残す)

氏名以外のフィールドも同じ内容でしょうか?

でしたら、集計クエリで、すべてのフィールドにグループ化の
指定をして、それをテーブル作成クエリにすれば、重複なしの
テーブルが作成されます。

タイトルRe^2: 重複データ一括削除
記事No: 2088
投稿日: 2002/10/04(Fri) 17:58
投稿者: M
早速のレス、ありがとうございます。
説明不足で申し訳ありません。

> > あるフィールドにあるデータで重複してるものがあります。
> > (たとえば「氏名」フィールドで同じ氏名の人が複数いる)
> > その重複してるデータを一括削除するにはどうしたらいいのでしょうか?
> > (つまり複数あるデータを1つのみ残す)
>
> 氏名以外のフィールドも同じ内容でしょうか?
>

いえ、氏名フィールドのみ(1つのフィールドのみ)重複してるデータのみ対象にして削除したいのです。
他のフィールドは全部違うデータです。

  ━━━━━━━━━━━━━━━━━━
  氏名フィールド  住所フィールド
  ━━━━━━━━━━━━━━━━━━
1  あああああ    かかかかか
2  あああああ    ききききき
3  いいいいい    くくくくく

となっているのです。
1と2は氏名が同じなので、どちらかを削除したいのです。
集計クエリですべてのフィールドにグループ化ですと他のフィールドも
グループ化されてしまうからダメですよね?

タイトルRe^3: 重複データ一括削除
記事No: 2089
投稿日: 2002/10/04(Fri) 18:15
投稿者: イケガミ
> 1と2は氏名が同じなので、どちらかを削除したいのです。
> 集計クエリですべてのフィールドにグループ化ですと他のフィールドも
> グループ化されてしまうからダメですよね?

どのレコードが消されてもいいのでしょうか?
一応、テーブル構成も教えてください。

タイトルRe^4: 重複データ一括削除
記事No: 2090
投稿日: 2002/10/04(Fri) 18:50
投稿者: M
> > 1と2は氏名が同じなので、どちらかを削除したいのです。
> > 集計クエリですべてのフィールドにグループ化ですと他のフィールドも
> > グループ化されてしまうからダメですよね?
>
> どのレコードが消されてもいいのでしょうか?
> 一応、テーブル構成も教えてください。

はい。氏名が同じならどのレコードが削除されてもかまいません。
テーブル構成は
氏名(テキスト型)、住所(テキスト型)、日付(数値型)があります。
日付や住所は重複OKです。
このテーブルの中で氏名が重複してるのがなければいいのです。
その氏名は一つのみ存在してて欲しいのです。

タイトルRe^5: 重複データ一括削除
記事No: 2092
投稿日: 2002/10/04(Fri) 19:19
投稿者: イケガミ
1 テーブルにオートナンバー型のフィールドを追加する
2 重複クエリを作成する
3 削除クエリを作成する(以下のように)

DELETE TableName.Number, TableName.氏名, TableName.住所
FROM TableName
WHERE (((TableName.Number) In (SELECT Min(TableName.Number) AS Numberの最小
FROM 重複クエリ INNER JOIN TableName ON 重複クエリ.[氏名 フィールド] = TableName.氏名
GROUP BY TableName.氏名;)));

で、一応できました。
(ただし、3件以上重複がある場合は、何度か実行する必要有り。)

タイトルRe^6: 重複データ一括削除
記事No: 2093
投稿日: 2002/10/04(Fri) 20:39
投稿者: M
すみません。
SQLは使ったことなくてコピペしてみたのですが、
パラメータの入力が出てしまうのですが、、、、

タイトルRe^7: 重複データ一括削除
記事No: 2094
投稿日: 2002/10/04(Fri) 21:02
投稿者: M
> すみません。
> SQLは使ったことなくてコピペしてみたのですが、
> パラメータの入力が出てしまうのですが、、、、

自己レスです。
パラメータの入力画面は回避できました。
でも1回実行してから2つあるうちの一つは確かに削除できましたが、
3つ以上あるものもあるので、繰り返して2回目を実行したら循環参照が発生して、
できませんでした。

タイトル【解決】重複データ一括削除
記事No: 2095
投稿日: 2002/10/04(Fri) 23:08
投稿者: M
すみません。解決しました。
イケガミさん、お手数おかけしました。
ありがとうございました。


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

PLESKコンパネ管理者用の操作手順情報を発信しています。
Parallels社PLESKコンパネ管理者用の操作手順情報を発信中・・・。

 

ページの先頭へ 前ページへ戻る