
A(1000件)とB(500件)の2つのテーブルがあります。
この2つをキーでつなぎ、Aの全てのデータを表示し、
2つの一致したデータのみにBの●・△・■のフィールドを追加したい。
【質問1】
2つを繋ぐ完全一致のキーがありませんので
まずは電話番号で確認し、その後住所、その後名前と・・・
最終的にはこの3つの内ひとつでも一致したものにBのフィールドを
追加したいのですが、どのようにするのがベストでしょうか?
【質問2】
ABのテーブルどちらにも重複したデータが含まれている場合
2つを繋ぎ“Aの全てのレコードとBの同じ結合フィールドのレコードだけを含める”
にチェックを入れてもAの1000件を超えて表示されます。
通常、“Aの全てのレコードとBの同じ結合フィールドのレコードだけ”なので
表示されるレコードは1000件ですよね?
重複データを削除する以外に1000件で表示する方法はないのでしょうか?
よろしくお願い致します。
No.1
- 回答日時:
【質問1】
BのファイルをAに対してキーの数だけ結合します。
A-B1,B2,B3
A-B1の条件:B1!電話番号=A!電話番号
A-B2の条件:B2!住所=A!住所
A-B3の条件:B3!名前=A!名前
●1:SWITCH(B1!電話番号=A!電話番号,B1!●,B2!住所=A!住所,B2!●,B3!名前=A!名前,B3!●,True,Null)
【質問2】
>表示されるレコードは1000件ですよね?
Bに同じキーが重複するとひとつのAレコードに複数の結合になる為、1000件を超えます。
集計のグループ化でAのキー(電話番号,住所,名前)をグループ化して
B側の表示する内容を先頭か最後にしてください。
この回答への補足
ご回答ありがとうございます。
すみません、なにせ初心者の為、回答を理解出来ません。
申し訳ありませんが、細かくお教え願いませんでしょうか?
【質問1】
AB間を3本の結合線で結ぶ。
その後のAーB1・AーB2・AーB3とは列を追加するのですか?
SWITCH関数はどこに入力するのですか?
SWITCHの●はBの追加するフィールドの事ですか?
【質問2】
集計のグループ化でAのキー(電話番号,住所,名前)をグループ化して・・・
Aテーブルには名前は同じでも備考の内容が異なっていたり、
グループ化できないフィールドがいくつかございます。
色々すみませんがよろしくお願い致します。
No.2ベストアンサー
- 回答日時:
クエリでテーブルを更新するのは難しい
のでは。
(1)
質問の●・△・■ を順番に、
F1、F2、F3とします。
もし、●・△・■ が一つの
フィールドならば少しコードを
変える必要があります。
以下のSQL文でクエリを作ります。
新しいクエリをSQLビューにして、
以下のSQL文をコピーし貼り付け、
保存します。名前を「クエリ差分」とします。
SELECT A.電話番号, B.F1, B.F2, B.F3
FROM A, B
WHERE (((A.電話番号)=[B].[電話番号])) OR (((A.住所)=[B].[住所])) OR (((A.名前)=[B].[名前]));
次に、フォームにボタンを一つ設定し、
名前を「cmd抽出」とします。
ボタン「cmd抽出」の上で右クリックして
プロパティシートを開き、その中の「クリック時」
のところで右端をクリックして、「ビルダの選択」
というフォームを表示し、その中の「コードビルダ」
を選択して、「OK」のボタンを押します。
コード表が開かれるので、表示されたコードを
以下のように設定します。
DAOを使っているので、コード表のツールから
参照設定を選択して、
Microsoft DAO xx Object Library
にチェックを入れて、OKとします。xxは3.6のような数字です。
このとき、
Microsoft ActiveX Data Objects xx Library
にチェックが入っていたらはずしてください。
Private Sub cmd抽出_Click()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset("A", dbOpenDynaset)
Set rs2 = db.OpenRecordset("クエリ差分")
If rs2.RecordCount > 0 Then
rs2.MoveFirst
Do Until rs2.EOF
Do Until rs1.EOF
If rs2!電話番号 = rs1!電話番号 Then
rs1.Edit
rs1!F1 = rs2!F1
rs1!F2 = rs2!F2
rs1!F3 = rs2!F3
rs1.Update
Exit Do
End If
rs1.MoveNext
Loop
rs2.MoveNext
Loop
End If
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub
(2)
クエリのデザインビューで結合線の矢印がAからBに
向かっていますか。
フィールドには何を表示する設定になっていますか。
そのとき、表示するフィールドのテーブルは何を
指定していますか。
SQL文だと、
SELECT A.電話番号
FROM A LEFT JOIN B ON A.電話番号 = B.電話番号;
のようになっていますか。
この回答への補足
ご回答ありがとうございます。
今回、テーブルを更新するのではなく、表示のみでよかったので、
piroin654様よりお教えいただきました、差分クエリとAテーブルをつなぎ
目的のA+F1・F2・F3を表示する事ができました。
言葉が足りなかったようで大変お手数をお掛けしました。
(2)
>クエリのデザインビューで結合線の矢印がAからBに向かっていますか。
向かっています。
>フィールドには何を表示する設定になっていますか。
Aの全てとBのF1・F2・F3です。
>そのとき、表示するフィールドのテーブルは何を指定していますか。
Aの全てとBのF1・F2・F3です。
>SQL文だと、
>SELECT A.電話番号
>FROM A LEFT JOIN B ON A.電話番号 = B.電話番号;
このようになっています。↓
SELECT
FROM A LEFT JOIN B ON A.電話番号 = B.電話番号;
Bテーブルに重複がある限り仕方がないのですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
Excelで〇のついたものを抽出し...
-
Office2024インストール後の疑問点
-
outlookのメールが固まってしま...
-
Microsoft Formsの「個人情報や...
-
マイクロソフト オフィスのサポ...
-
Office2021を別のPCにインスト...
-
大学のレポート A4で1枚レポー...
-
エクセルで質問です。 ハイパー...
-
マクロ自動コピペ 貼り付ける場...
-
Microsoft365について
-
エクセルからメールを作れるか...
-
エクセル 日付順に並べてかえた...
-
Microsoft Office Homeインスト...
-
office2019 のoutlookは2025年1...
-
Office 2021 Professional Plus...
-
パソコンWindows11 Office2021...
-
エクセル:一定間隔で平均値を...
-
別シートの年間行事表をカレン...
-
Excel 日付を比較したら、同じ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
マイクロソフト オフィスのサポ...
-
Office2021を別のPCにインスト...
-
エクセル 日付順に並べてかえた...
-
outlookのメールが固まってしま...
-
Excelで〇のついたものを抽出し...
-
Microsoft Formsの「個人情報や...
-
マクロ自動コピペ 貼り付ける場...
-
Office2024インストール後の疑問点
-
office2019 のoutlookは2025年1...
-
エクセルで質問です。 ハイパー...
-
エクセル 同じ数字を他の列に自...
-
別シートの年間行事表をカレン...
-
【Excel VBA】PDFを作成して,...
-
Excel 日付を比較したら、同じ...
-
パソコンWindows11 Office2021...
-
Office 2021 Professional Plus...
-
エクセル:一定間隔で平均値を...
-
Teams内でショートカットって貼...
おすすめ情報