• ベストアンサー

ACCESSクエリでの結合の仕方・・・SQL文かも

ACCESS 2003を使用しています。 テーブルA テーブルB の2テーブルでクエリを作っています。 結合的には・・・ テーブルAのフィールドX ⇔ テーブルBのフィールドY です。 これで2テーブルに共通する一致データのみ抽出はできるのですが、 2テーブルに共通する一致データに加えて、 2テーブルの不一致データも一緒にクエリ表示されるようにしたいのです。 欲しいのは抽出イメージは、以下のような感じのクエリ結果です。 テーブルA:フィールドX|テーブルBのフィールドY a             |(空) (空)           |b c             |c d             |(空) (空)           |e f              |f  g             |(空) h             |h おそらく、SQL文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

SQL文のみで組もうとしたら、私自身がちょっと混乱してしまったので(汗)、 「SQL+クエリ」の組み合わせの形で回答させて戴きます。 なお、No.1の方の回答と同様、更新はできません。 (更新が必要な場合は、画像添付したクエリをテーブル作成クエリか  追加クエリにして、「ワークテーブルで編集&更新ボタンで反映」  といった機構が必要になります) まず、新規クエリのSQLビューに、以下のSQL文を貼り付けて、 名前を「SQ1」として保存してください。 内容は、「テーブルAのフィールドX、及びテーブルBのフィールドYに あるデータの非重複の一覧」になります: Select フィールドX As Idx From テーブルA Union Select フィールドY As Idx From テーブルB; 次に、この「SQ1」クエリと、テーブルA、テーブルBを使用し、添付 画像のようなクエリを作成してください。 (こちらのクエリ名は何でもOkです) 念のため、SQL文も貼り付けておきます: SELECT テーブルA.フィールドX, テーブルB.フィールドY FROM (SQ1 LEFT JOIN テーブルA ON SQ1.Idx = テーブルA.フィールドX) LEFT JOIN テーブルB ON SQ1.Idx = テーブルB.フィールドY ORDER BY SQ1.Idx; ※「SQ1」に作成した「Idx」フィールドは、非表示のまま、並べ替えに   使用することで、ご質問文の通りの並べ順にしています。

THUBAN
質問者

お礼

はい、抽出だけですので、内容の更新はなくて大丈夫です。 なんと、「SQL+クエリ」という手法ができるんですね。 考えてみればできることがわかるのですが、これはちょっと気がつきませんでした。 今回は、この手法でやってみたいと思います。 ご丁寧に挿絵までいただき、大変よく理解することができました! 勉強にもなりました! 本当にどうもありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

内部結合、外部結合、左外部結合などの言葉がある。 それをエクセルの解説書かWEBで勉強し、質問はどれに当たるか勉強してから、質問すべきだ。 http://www.geocities.jp/kotopara_g/oshiete01/a_ketsugou.htm など。 SQLはクエリをデザインビューで正しく組み立てれば、SQLビューで見るとどうなるか判る。2の次だ。 >SQL文を書く必要があるとは、想像できるのですが・ 生半可な知識で先走りすぎ。SQLから書く人やVBA+SQLでやる(出来る)人ももちろん居るがまだそのレベルではなさそうだ。 ACCESSのGUIのよさを利用すべきだ。

THUBAN
質問者

お礼

恐れ入ります。 EXCELであれば、VBA+SQLで既にガンガンに組んでいて、DB抽出も更新も慣れています。 ACCESSでも、よくクエリは使っていますが、ユニオンクエリ方面が、あまり使ったことがないもので。 勉強します!

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

X  Y    b    e a c   c d f   f g h   h 表示順はXになってしましますが、以下のクエリでできると思います。 (更新はできません) SELECT テーブルA.X, テーブルB.Y FROM テーブルA LEFT JOIN テーブルB ON テーブルA.X = テーブルB.Y UNION SELECT テーブルA.X, テーブルB.Y FROM テーブルA RIGHT JOIN テーブルB ON テーブルA.X = テーブルB.Y;

THUBAN
質問者

お礼

ご回答どうもありがとうございます。 こちらも試してみたいと思います。 やはりユニオンクエリが必要なのですね・・ アクセスのGUIだけで、SQLを書かなくても、こういったことができるようになると楽チンなのですが・・・でもそれでは勉強になりませんね(苦笑 とにかく、ユニオンクエリに頭をひねっている時間がなかったので、助かりました。 ありがとうございました!