- ベストアンサー
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文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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」フィールドは、非表示のまま、並べ替えに 使用することで、ご質問文の通りの並べ順にしています。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
内部結合、外部結合、左外部結合などの言葉がある。 それをエクセルの解説書かWEBで勉強し、質問はどれに当たるか勉強してから、質問すべきだ。 http://www.geocities.jp/kotopara_g/oshiete01/a_ketsugou.htm など。 SQLはクエリをデザインビューで正しく組み立てれば、SQLビューで見るとどうなるか判る。2の次だ。 >SQL文を書く必要があるとは、想像できるのですが・ 生半可な知識で先走りすぎ。SQLから書く人やVBA+SQLでやる(出来る)人ももちろん居るがまだそのレベルではなさそうだ。 ACCESSのGUIのよさを利用すべきだ。
お礼
恐れ入ります。 EXCELであれば、VBA+SQLで既にガンガンに組んでいて、DB抽出も更新も慣れています。 ACCESSでも、よくクエリは使っていますが、ユニオンクエリ方面が、あまり使ったことがないもので。 勉強します!
- 30246kiku
- ベストアンサー率73% (370/504)
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;
お礼
ご回答どうもありがとうございます。 こちらも試してみたいと思います。 やはりユニオンクエリが必要なのですね・・ アクセスのGUIだけで、SQLを書かなくても、こういったことができるようになると楽チンなのですが・・・でもそれでは勉強になりませんね(苦笑 とにかく、ユニオンクエリに頭をひねっている時間がなかったので、助かりました。 ありがとうございました!
お礼
はい、抽出だけですので、内容の更新はなくて大丈夫です。 なんと、「SQL+クエリ」という手法ができるんですね。 考えてみればできることがわかるのですが、これはちょっと気がつきませんでした。 今回は、この手法でやってみたいと思います。 ご丁寧に挿絵までいただき、大変よく理解することができました! 勉強にもなりました! 本当にどうもありがとうございました。