- ベストアンサー
ACCESSで複数のテーブルで同じ内容の行を抽出
いつもお世話になっておりあます。 ACCESSのクエリ作成でお聞きしたき件ありまして、 投稿させていただきました。 下記の様な商品購入テーブルA・Bで ・・・テーブル定義・・・ テーブルA 顧客ID 商品名 テーブルB 顧客ID 商品名 ・・・入力データ・・・ テーブルA 顧客ID 商品ID 0001 あめ 0002 コーラ 0003 せんべい テーブルB 顧客ID 商品ID 0001 おかし 0002 コーラ 0003 わたあめ ・・・・・・・・・・・ とのテーブルにて テーブルAとテーブルBの同じ状態の行 0002 コーラ を抽出するには、どのようなクエリを作成すればよろしいのでしょうか? 見当がつかず、こまっております。 どなたか、御対応いただけますと、ありがたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
はずしていたらごめんということで、 SELECT テーブルB.商品ID, テーブルB.商品名 FROM テーブルA LEFT JOIN テーブルB ON (テーブルA.商品名 = テーブルB.商品名) AND (テーブルA.商品ID = テーブ ルB.商品ID) WHERE (((テーブルB.商品ID) Is Not Null) AND ((テーブルB.商品名) Is Not Null)); または SELECT テーブルA.商品ID, テーブルA.商品名 FROM テーブルA RIGHT JOIN テーブルB ON (テーブルA.商品名 = テーブルB.商品名) AND (テーブルA.商品ID = テーブ ルB.商品ID) WHERE (((テーブルA.商品ID) Is Not Null) AND ((テーブルA.商品名) Is Not Null)); 結果は同じことですが。
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
#1です。 「顧客IDと商品名が一致」でしたね。一部訂正します。 3)デザインのフィールドに表示されたテーブルAの[顧客ID]をドラッグして デザインのフィールドに表示されたテーブルBの[顧客ID]にドロップ。 を 3)デザインのフィールドに表示されたテーブルAの[顧客ID][商品]をドラッグして デザインのフィールドに表示されたテーブルBの[顧客ID]にドロップ。 続いてデザインのフィールドに表示されたテーブルAの[商品名]をドラッグして デザインのフィールドに表示されたテーブルBの[商品名]にドロップ。 ※必ずドラッグ&ドロップする方向を統一しておいてください。 に訂正。 6)上記3)で結ばれる線をダブルクリックして、テーブルAのすべて・・を選択。 を 6)上記3)で結ばれる線をダブルクリックして、テーブルAのすべて・・を選択。 ※結合線が2本あるので、必ず両方とも同じ条件にしてください。 に訂正。
お礼
おおーーーー なんとなくできました テーブル間の線を2本引くとは わたしも ひとかわむけました ww ありがとうございます 感謝!
- bin-chan
- ベストアンサー率33% (1403/4213)
バージョン書いてないので、2003までの方法で記述します。 1)オブジェクト「クエリ」で新規作成>デザインビュー 2)「テーブルの表示(だったか?)」で、テーブルAとテーブルBを選択して「閉じる」。 3)デザインのフィールドに表示されたテーブルAの[顧客ID]をドラッグして デザインのフィールドに表示されたテーブルBの[顧客ID]にドロップ。 4)テーブルAの[顧客ID][商品名]をグリッドにドラッグ&ドロップ。 5)赤い!マークをクリック。 これで一致するものが表示できます。 テーブルAにあってテーブルBに無いものを出すには 6)上記3)で結ばれる線をダブルクリックして、テーブルAのすべて・・を選択。 7)テーブルBの[顧客ID][商品名]をグリッドにドラッグ&ドロップ。 テーブルBの[顧客ID][商品名]の表示のレ点は外しておく。 8)テーブルBの[顧客ID]の抽出条件に[is null]を設定。 9)赤い!マークをクリック。 これで表示できます。 逆にテーブルAに無くてテーブルBにあるものを出すには 6)上記3)で結ばれる線をダブルクリックして、テーブルBのすべて・・を選択。 7)テーブルBの[顧客ID][商品名]をグリッドにドラッグ&ドロップ。 テーブルAの[顧客ID][商品名]の表示のレ点は外しておく。 8)テーブルAの[顧客ID]の抽出条件に[is null]を設定。 9)赤い!マークをクリック。 これで表示できます。
お礼
SQLでのご提示ありがとうございます。 私のACCESSでSQLを表示させてところ SELECT テーブルA.顧客ID, テーブルA.商品名 FROM テーブルA INNER JOIN テーブルB ON (テーブルA.顧客ID = テーブルB.顧客ID) AND (テーブルA.商品名 = テーブルB.商品名); となりました。 わたしのは LEFTではなくINNERになっています (私のは、同じところを見つけるので内部結合かもです) NULLの対応も、御提案いただき、感謝しております。 NULLいつか使うはずです。 (ノートにメモしておきました!) ありうがとうございます。