プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっています。

Accessでクエリを作成するにあたり、リレーションシップを設定したいのですが、
一致させるフィールドが「123456/S1234とS1234」,「S001234とS1501234E」,「5678と5678」など、
完全一致するものと一部一致するものが混在しています。

一部一致のものでも、どれと一致させるかを判断することはできるのですが、
この状態では通常のリレーションシップは設定できませんか?

設定できないならば、一度加工して完全一致したテーブルを作成し、
それとリレーションシップをVBAで設定するしかないでしょうか?

A 回答 (5件)

一致条件を判断する関数をVBAで作成すれば可能ですが、



「S001234とS1501234E」が一致するということは、1234 が一致しているということですが、前者の一部と後者の一部の一致も許可するということですよね。

だとすると、「S001234」は一つ前のデータ例「S1234」とも一致するし、「S1501234E」は同じく「123456/S1234」とも一致するということになりますね。

これでは、一致する条件が緩すぎて、複数の組み合わせが多数できてしまい使い物にならないと思いますが。

もう少し厳密な条件定義が必要ですね。

また、関数で一致条件を定義するとインデックスの機能が使えませんので、レコード件数が多いと処理が重くなります。

加工して完全一致になるフィールドを作成する方法をとることをお勧めましす。

どちらにしても現状の条件ではどうにもなりません。
    • good
    • 0
この回答へのお礼

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

比較条件が緩いのは、相談するにあたりちょっとデータを単純化しているのでどうにかなりそうです。(紛らわしくてすみません)

が、VBAで関数を使うつもりが、処理がおそくなるとは知りませんでした。

やはり完全一致フィールドを比較用キーとして作成するのがよさそうですね。

お礼日時:2014/10/18 05:47

補足: 1対多であれば、先の補足は無視してください。

    • good
    • 0

補足:選択クエリはちょっと複雑になるかも・・・。



改定後の構造で選択クエリを作成してみました。その場合、普通に作成すると、参照が倍になりました。(添付図参照のこと)

こういう状況が出現することも想定して作業を進められたがいいかもです。
「Access のリレーションシップで一部」の回答画像4
    • good
    • 0

>一致させるフィールドに一部一致するものが混在しています。


>一度加工して完全一致したテーブルを作成し・・・

それが妥当かどうかは、全体のデータ構造だと思いますよ。

[テーブル1]

ID=1
列1=12345
・・・・・
ID=7
列1=12345

[テーブル2]

ID=1
列1=12345
列2=S1234

ID=2
列1=12345
列2=12345

[テーブル2.列1]を新たに追加。そして、[テーブル1.列1]-[テーブル2.列1]でリレーションシップを設定。実際には、[テーブル2.1列2]のみを参照する。こういう設計変更が考えられますが、それが妥当かどうか・・・。全体のデータ構造だと思いますよ。
    • good
    • 0

キーとして扱う部分のパターンか複数あるなら、それぞれを加工した


「比較用キー」とでも名付けた列を設けておく?
    • good
    • 0
この回答へのお礼

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

なるほど、比較用キーというのもアリですね。

しかし、比較するデータはそれぞれが随時更新されていくので、その都度比較用キーを更新するか?と考えると、ちょっと複雑になってきます。(T_T)

お礼日時:2014/10/18 05:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す