• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSクエリでの結合の仕方)

ACCESSクエリでの結合の方法

このQ&Aのポイント
  • ACCESS 2003を使用している場合、3つのテーブルを結合する方法について教えてください。
  • テーブルAのフィールドXとテーブルCのフィールドX、テーブルBのフィールドXとテーブルCのフィールドXを結合することで、3つのテーブルに共通するデータのみ抽出することができます。
  • しかし、テーブルAとテーブルBの不一致データも一緒に抽出したい場合、どのようにすればよいでしょうか?お教えいただけますと助かります。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.7

>実際には、TCのフィールドデータだけでなく、TAとTBの一部のフィールドデータも表示させたかったので、 >以下のようにセレクトしたいぶんを記述すればいいわけですね? >SELECT TA.フィールドA1, TB.フィールドB1, TC.フィールドC1, TC.フィールドC2, TC.フィールドC3・・・ >FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC >WHERE TC.フィールドC1 = TA.フィールドA1 >  OR TC.フィールドC1 = TB.フィールドB1 正解です

THUBAN
質問者

お礼

ありがとうございました! 望みどおり実現することができました。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.6

#1です > 結果、抽出データは無しでした。 う~ん?日本語的に私の方が読み取れてないのかな? 具体的な話・・・ テーブルA フィールドA1 a b c d テーブルB フィールドB1 b e f テーブルC フィールドC1 d g h と、した場合 結果、欲しいのは? 私の想定では、 a c が、出てくる結果を想定していたのですけど?

THUBAN
質問者

補足

お手数おかけしています。 欲しいデータは、 テーブルAフィールドA1とテーブルCフィールドC1をぶつけて 一致するデータおよび不一致するデータ と テーブルBフィールドB1とテーブルCフィールドC1をぶつけて 一致するデータおよび不一致するデータ です。 これらを一回のクエリ実行で実現させたいわけです。 一致したデータはフィールドに存在し、不一致でデータが存在しないフィールドは空白になっている状態で、クエリ結果として出したいのです。 テーブルA フィールドA1 a b c d テーブルB フィールドB1 b e f テーブルC フィールドC1 d g h と、した場合 欲しいのは結果は、以下のような感じのクエリ結果です。 テA:フィA1|テB:フィB1|テC:フィC1 a       |(空)    |(空) b       |b      |(空) c       |(空)    |(空) d       |(空)    |d (空)     |e      |(空) (空)     |f       |(空) (空)     |(空)    |g (空)     |(空)    |h

すると、全ての回答が全文表示されます。
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.5

No3 です。 実は、以下の書き方なのですが、 SELECT テーブルC.* FROM テーブルA, テーブルB, テーブルC WHERE テーブルC.フィールドC1 = テーブルA.フィールドA1   OR テーブルC.フィールドC1 = テーブルB.フィールドB1 テーブル名が長い場合は、以下のように 「テーブルA」を「TA」として略して使えます SELECT TC.* FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC WHERE TC.フィールドX = TA.フィールドX   OR TC.フィールドX = TB.フィールドX

THUBAN
質問者

補足

なるほど。。。始めて知りました!勉強になります。 「AS = ~であるとして」という意味で、略称に置き換えて記述できるというわけですね。 実はテーブル名が長いので、記述しているときにわけがわからなくなりそうだったんで、これは便利です。 実際には、TCのフィールドデータだけでなく、TAとTBの一部のフィールドデータも表示させたかったので、以下のようにセレクトしたいぶんを記述すればいいわけですね? SELECT TA.フィールドA1, TB.フィールドB1, TC.フィールドC1, TC.フィールドC2, TC.フィールドC3・・・ FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC WHERE TC.フィールドC1 = TA.フィールドA1   OR TC.フィールドC1 = TB.フィールドB1

すると、全ての回答が全文表示されます。
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.4

#1です > テーブルAのフィールドA1 > テーブルBのフィールドB1 > テーブルCのフィールドC1 > とした場合、 > SELECT * > FROM テーブルA > WHERE フィールドA1 Not In (SELECT フィールドB1 FROM テーブルB) > And フィールドA1 Not In (SELECT フィールドC1 FROM テーブルC); 相関関係は、問題ないと思いますよ

THUBAN
質問者

補足

ありがとうございます。そうですか・・・ それで実施してみたところ、えらく戻ってくるのに時間がかかり、結果、抽出データは無しでした。 データ的には、かならず一致するデータと不一致のデータを入れてテストしているのですが・・・

すると、全ての回答が全文表示されます。
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

質問の内容だと、これかな? SELECT TC.* FROM テーブルA AS TA,テーブルB AS TB,テーブルC AS TC WHERE TC.フィールドX = TA.フィールドX   OR TC.フィールドX = TB.フィールドX

THUBAN
質問者

補足

ご回答おそれいります。 そうすると・・・ SELECT テーブルC.* FROM テーブルA AS テーブルA, テーブルB AS テーブルB, テーブルC AS テーブルC WHERE テーブルC.フィールドC1 = テーブルA.フィールドA1   OR テーブルC.フィールドC1 = テーブルB.フィールドB1 のような記述となるのでしょうか?

すると、全ての回答が全文表示されます。
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

#1です すみません Not In の後のユニオンクエリは動作しないみたい>< SELECT * FROM テーブルA WHERE フィールド Not In (SELECT フィールド FROM テーブルB) And フィールド Not In (SELECT フィールド FROM テーブルC); と、ただ「AND」で結ぶくらいしか無いみたい;;

THUBAN
質問者

補足

おそれいります。 それぞれのフィールドが、どのテーブルのフィールドなのかわかりませんので教えてください。 SELECT * FROM テーブルA WHERE フィールドA1 Not In (SELECT フィールドB1 FROM テーブルB) And フィールドA1 Not In (SELECT フィールドC1 FROM テーブルC); ということで、よろしいでしょうか?

すると、全ての回答が全文表示されます。
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

サブクエリとユニオンクエリの話じゃないかな? Select ~ From テーブルA Where テーブルA.フィールド Not In (Select フィールド From テーブルB Union Select フィールド Form テーブルC) 基本的に「不一致」の場合、「結合」を使用しないようにした方が楽だよ

THUBAN
質問者

補足

SQLビューでクエリ保存をしようとしたところ、 (Select フィールド From テーブルB Union Select フィールド Form テーブルC) の部分で、「この操作は、サブクエリでは実行できません」と言われて保存ができないようです。 テーブルAのフィールドA1 テーブルBのフィールドB1 テーブルCのフィールドC1 とした場合、 Select テーブルA.フィールドA1, テーブルB.フィールドB1, テーブルC.フィールドC1 AS テーブルC.フィールドC2 AS テーブルC.フィールドC3・・・ From テーブルA Where テーブルA.フィールドA1 Not In (Select フィールドB1 From テーブルB Union Select フィールドC1 Form テーブルC) という記述で、よろしいのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう