- ベストアンサー
主キー以外重複データ(フィールド多数)の抽出方法
- 大きなテーブルにおいて、主キー以外の全てのフィールドが一致する重複データを抽出する方法について悩んでいます。
- フィールド数が多いテーブルでのグループ化やVBAを使用したループ処理はうまく機能しないため、別の解決策を模索しています。
- Accessの機能を使用して、主キー以外の全フィールドが一致する重複レコードを効率的に抽出する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>フィールドが100以上ある大きなテーブルが 問題は「フィールド数が多過ぎる」なので、フィールド数を減らす工夫をすれば良いのです。 クエリ作成で「1~10番目のフィールドを文字列連結して1つのフィールドにして、11~20番目のフィールドを文字列連結して1つのフィールドにして(中略)91~100番目のフィールドを文字列連結して1つのフィールドにして」というクエリを作れば、フィールド数が10分の1になります。 このようにフィールド数を減らして、フィールド数をグループ化可能な個数まで減らせば、問題解決出来ます。 >VBAで一行ずつループで処理しようにもキー以外の全フィールド一致とする検索条件のSQLのWHERE式が複雑すぎると出て処理できませんでした VBAで処理するなら 1.空テーブルを2つ用意する。 2.インサートクエリで、元テーブルの全レコードを、1つめの空テーブルに挿入する 3.上記の2の処理を全てのテーブルで行なう。 4.1つめの空テーブルに、重複した状態で全テーブルのレコードが入っているので、その作成したテーブルの全レコードをソートして出力するクエリを作る 5.上記4のクエリの出力を、2つめの空テーブルに挿入する 6.2つめのテーブルに対し、VBAで「直前のレコードとカレントレコードの全フィールドを比較して、完全一致してたら重複削除する」と言う処理を、先頭レコードから1レコード毎に繰り返す(ソートされているので、全フィールドが同じレコードは、連続して出現する筈) と言う処理をしてみて下さい。 つまり「重複しているのも構わず、1つのテーブルに集めて、ソートしてから、重複レコードを削除する」のです。「最後に重複してない状態」になっていれば「途中が重複している状態でも問題無い」ので。
その他の回答 (4)
- chayamati
- ベストアンサー率41% (260/624)
そのレコードを一つにまとめる為重複データを抽出し削除したいのです 条件は「主キー以外の全てのフィールドのデータが一致してる重複データ」であり、それをどうやればAccessの機能で出せるのか悩んでいます。 ------------------------------------------------------------------------------------------------------ 今晩は Accessは連続している複数のフィールドに主キーマークを付けることが出来ます 新規に重複チェック用のテーブル作成し、これにインサートすれば、重複ではじかれたレコードのテーブルが生成されます。 主キー設定は、添付のテーブルで記述します。 品名IDをクリックし、Shift+色柄IDクリックで連続フィールドがアクティブになります。主キーツールをクリック
お礼
すみません、それは主キーにできるフィールド数が足りませんでした なにせフィールド数が3桁あるので…
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足の補足】主キー自体も復元したい場合は? その場合は、先のINSERT文を多少変更することになります。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Q、主キー以外が完全一致している重複レコードを抜き出したい。 A、ではなくて、重複していないレコードを抽出すればよいのでは? 添付図のように、重複していないレコードを抽出するのは割と簡単。主キー列に関する情報がないので、そこをどうするのかはわからない。一応手順を示せば、 1、全てを一つのテーブルにまとめる。 2、まとめたテーブルのコピーを作る。 3、主キー列を削除する。 行う作業は、これだけです。後は、次のようなSQL文を実行すれば非重複レコードが抽出されます。 SELECT DISTINCT * FROM Test_copy;
お礼
ありがとうございます。ですが「重複しているものから一つ残して消す」という作業がしたいため重複しているレコードを特定した上で選定しないといけないため、重複していないレコードは重要ではないのです。
お礼
ありがとうございます。 確かにSQLだとフィールド数制限がかかってしまいますが フィールドを結合したりVBAで直接フィールドを判定できる形に持っていけばどれだけ多くても問題ないのですね。 一回きりの作業とはいえ膨大だったので助かりました。