- ベストアンサー
アクセス クエリとテーブルの結合方法についての質問
- 2つのテーブルをキーで結合し、AのデータにBのフィールドを追加したい。結合キーは電話番号、住所、名前のいずれかで一致すればよい。
- ABのテーブルに重複したデータがある場合、重複データを削除せずに1000件まで表示する方法はあるか。
- みんなの回答 (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.電話番号; のようになっていますか。
その他の回答 (1)
- mshr1962
- ベストアンサー率39% (7417/18945)
【質問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テーブルには名前は同じでも備考の内容が異なっていたり、 グループ化できないフィールドがいくつかございます。 色々すみませんがよろしくお願い致します。
補足
ご回答ありがとうございます。 今回、テーブルを更新するのではなく、表示のみでよかったので、 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テーブルに重複がある限り仕方がないのですね。 ありがとうございました。