• ベストアンサー

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文を書く必要があるとは、想像できるのですが・・・ どなたか、ご教授いただけると助かります。 よろしくお願いします。

  • THUBAN
  • お礼率76% (771/1002)

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

  • ベストアンサー
  • 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/17068)
回答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を書かなくても、こういったことができるようになると楽チンなのですが・・・でもそれでは勉強になりませんね(苦笑 とにかく、ユニオンクエリに頭をひねっている時間がなかったので、助かりました。 ありがとうございました!

関連するQ&A

  • ACCESSクエリでの結合の仕方

    ACCESS 2003を使用しています。 テーブルA テーブルB テーブルC の3テーブルでクエリを作っています。結合的には・・・ テーブルAのフィールドX⇔テーブルCのフィールドX テーブルBのフィールドX⇔テーブルCのフィールドX です。 これで3テーブルに共通する一致データのみ抽出はできるのですが、 3テーブルに共通する一致データに加えて、テーブルAとテーブルBの不一致データ(テーブルCに対する)も一緒に抽出できるようにしたいのです。 2テーブルだけの結合であれば、結合プロパティを、 テーブルAのフィールドX⇒テーブルCのフィールドX のようにすることで実現できるのですが、3テーブルの結合の場合、どのようにすればよいでしょうか? テーブルAのフィールドX⇒テーブルCのフィールドX テーブルBのフィールドX⇒テーブルCのフィールドX のようにしてみましたが、「あいまいな外部結合が含まれているので、SQLステートメントを実行できません。云々。。。」と警告エラーがでてしまいます。 どなたが、ご教授いただけると助かります。 ご面倒ですが、よろしくお願い致します。

  • ACCESS クエリ抽出する際、重複しているフィールドを取り除きたい

    テーブルA テーブルB があり、そのクエリ クエリA クエリB を作ってあります。 クエリA フィールドA1 フィールドA2 クエリB フィールドB1 フィールドB2 結合は、クエリAのフィールドA1 ⇒ クエリBのフィールドB1 としており、 実行結果としては、以下のようになって抽出されます。 クA:フィA1|クA:フィA2|クB:フィB1|クB:フィB2 a       |J      |(空)    |(空) a       |J      |(空)    |(空) a       |K      |(空)    |(空) b       |L      |(空)    |(空) b       |L      |(空)    |(空) b       |M      |(空)    |(空) b       |M      |(空)    |(空) c       |X      |c      |P c       |X      |c      |P c       |X      |c      |Q c       |X      |c      |Q c       |X      |c      |Q d       |Y      |d      |R d       |Y      |d      |S d       |Y      |d      |S これを踏まえて、 重複を除いた形での実行結果として得たいパターンは以下の2つです。 <パターン(1)> クA:フィA1| a       | b       | c       | d       | ※他のフィールドは必要無し。 <パターン(2)> クA:フィA1|クA:フィA2|クB:フィB1|クB:フィB2 a       |J      |(空)    |(空) a       |K      |(空)    |(空) b       |L      |(空)    |(空) b       |M      |(空)    |(空) c       |X      |c      |P c       |X      |c      |Q d       |Y      |d      |R d       |Y      |d      |S ※4フィールドが同一になるところだけ除きたい 恐縮なのですが、この2パターンのSQLをご教授いただけると助かります。 よろしくお願い致します。

  • アクセスのクエリ作成について

    下記のようなテーブルとフィールドがあるとします。 Aテーブル  会社名 分類 都道府県 住所 HPアドレス  Bテーブル  担当者 部署 電話 メールアドレス Cテーブル  受付番号 分類 Dテーブル  受付番号 分類 ここでAテーブルの都道府県で一致するデータを抽出し、 下記のフィールドを表示するクエリを作成したいと思っています。 A 会社名 分類 都道府県 住所 HPアドレス B 担当者 部署 メールアドレス 電話 C 受付番号 D 受付番号 クエリを作成し実行しましたが、何もデータが出てきません。 全フィールド入力していないと抽出できないのでしょうか。 中にはHPアドレス等がない場合もあるのです。 すみませんが、どなたか教えて下さい。 よろしくお願いします。

  • ACCESS2000の重複クエリ

    よろしく、お願いします。 ACCESS2000+Win2000で使用しています。 ACCESS2000の”テーブルA”の”フィールドa”の”重複クエリ甲”の結果としてX、Y、Zというデータが出たとします。 そのうち、XのみにテーブルAの”フィールドb(Yes/No型)”にフラグを立てたいのですが、良い方法はありませんか? 私は重複クエリ甲に、更新クエリで更新する事は出来ませんよね? 甲と同じく”重複クエリ乙”を作って、乙は”集計”で先頭のみを出して、甲と乙の”不一致クエリ”で差分を出してみたりもしたのですが、更新クエリを使えない為に、フラグを立てられません。 何か良い方法を教えてください。 お願い致します。

  • Access2003 複雑な条件のデータ抽出

    ☆1つのテーブルで、フィールド[A]~[C]があり、文字および英数字のデータが混在しています。 (ただし、フィールド[C]には、空欄(Null)になっている場合があります) =========================================================== (テーブル(1)) No  [A]      [B]    [C]     [D]      [E]      [F] 1   111      X    あ       2   222      X     か   3   333      X     さ  4   111      Y    た 5   222      Y   (Null)  6   333      Y     は 7   222      Z     ま   8   333      Z     や  9   111      Z    ら    =========================================================== [課題] (1) テーブル(1)のフィールド[A]の値を参照し、「111」の場合は、   フィールド[C]の値を[D]へ抽出する([B]でグループ化) (2) 同様に、フィールド[A]の値を参照し、「222」の場合は、   フィールド[C]の値を[E]へ抽出する([B]でグループ化) (3) 同様に、フィールド[A]の値を参照し、「333」の場合は、   フィールド[C]の値を[F]へ抽出する([B]でグループ化) (4) 新規クエリにて、上記課題(1)~(3)の条件を指定して実行すると    以下の抽出結果が表示される =========================================================== [抽出結果] (テーブル(2)) No  [B]    [D]    [E]      [F] 1   X     あ    か      さ     2   Y     た   (Null)    は   3   Z     ら    ま     や =========================================================== 別々のレコードにあるフィールド[C]の値を、条件に従い テーブル(2)のように1つのレコードにまとめたいのです。  大変恐縮ですが、私はSQLが書けないので、フィールド欄へ関数式を 入力して条件を指定しております。 できましたら、各フィールドへ入力する関数式を教えていただけると助かります。 また、関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、何とぞ宜しくお願い致します。

  • アクセス テーブル、クエリーについて

     アクセスでソフト作成中です。そこで教えてほしいことがあります。 たとえば下記のように2つのテーブルがあります。 テーブル1   テーブル2   フィールドA    フィールドB  a1       10  b1       20  c1       30          テーブル1の数値は固定します。そこで下記のようなクエリーを作成したいのです。 クエリー1 フィールドA フィールドB a1 10 b1 20 c1 30 テーブル2に数字を入れていくと テーブル1   テーブル2   フィールドA    フィールドB  a1       10  b1       20  c1       30           40 クエリー1 フィールドA フィールドB a1 40 b1 20 c1 30 このように数字が上書きされていくようなクエリーは作成できないでしょうか。(あくまでテーブル1の数値は固定、フィールドAとフィールドBにリレーションシップは設定されていない。) よろしくおねがいします。

  • 【Access】部分一致で不一致データを抽出したい

    クエリで2つのテーブルから、不一致データを抽出したいのですが、 完全一致だけでなく部分一致のデータも一致データとして取り除きたいです。 [テーブルA]フィールド1 000-0001 000-0001A 000-0002 000-0003 000-0004 [テーブルB]フィールド2 000-0001 000-0002 というようなデータで、結果は [結果] 000-0003 000-0004 というふうにしたいです。 (000-0001だけでなく000-0001Aというデータも取り除きたいのです。) Access初心者で、クエリウィザードを使用した重複データ抽出、不一致データ抽出、 およびクエリデザインを使用した重複データ抽出が何とかできる程度です。 初心者でも分かるようにご回答いただければ大変助かります。 よろしくお願いいたします。

  • Accessの不一致クエリについて

    Accessの初心者です。二つのテーブルの異なるフィールどを比較する方法について、教えてください。 例えば、"6523610"という数字が両方のテーブルにあるかどうか調べたいとします。 テーブルA 523(フィールド名:契約コード)+610(ID) テーブルB 6523(フィールド名:取引コード)+61(フィールド名:地域コード) と、それぞれ構成が違います。頭につく"6"と最後の"0"は共通の数字です。クエリで新たなフィールドを作って、"6523610"にするまではわかるのですが、どのフィールドを関連づけていいかわかりません。このような場合は、不一致クエリではできないのでしょうか? 仕事で、明日中にデータを調べなければいけないので困っています。 よろしくお願いします。

  • アクセス VBA クエリSQL文変更

    以前、教えていただいたにもかかわらず、作業が上手くいったことで、理解を深めることを疎かに してしまい、一部を修正したところ、わからなくなってしまいました。 申し訳ございませんが、教えてください。 Xと同一の構成である X1~という複数のテーブルから一つを選択して、クエリYを実行 クエリYは、フィールド1の値が BBBであるレコードの、フィールド1、3、5を抽出 Dim dbs As DAO.Database Dim qrdef As DAO.QueryDef Set dbs = Currentdb Set qrdef = dbs.QueryDefs("クエリY") qrdef.SQL = Replace(Expression:=qrdef.SQL _         , Find:="テーブルX" _         , Replace:="テーブルX1" _         , Compare:=vbTextCompare) Set qrdef = Nothing Set dbs = Nothing 実行時エラー3075  クエリ式'テーブルX1.フィールド1'の構文エラー:演算子がありません デバッグ qrdef.SQL = Replace(Expression:=qrdef.SQL _         , Find:="テーブルX" _         , Replace:="テーブルX1" _         , Compare:=vbTextCompare) 元となるクエリを直接実行すると正しく動作します。

  • Accessのクエリで2つのフィールドが同条件の場合に結合したい

    Accessのクエリで2つのフィールドが同条件の場合に結合したい 以下のようなテーブルが2つあって、その2つのフィールドが一致する場合につなげるクエリを作りたいと考えています。 【テーブル名:勤怠データ】 氏名│日付│出勤時刻 ────────────────── 鈴木│2/1│8:01 鈴木│2/2│8:02 鈴木│2/3│8:03 高橋│2/1│9:01 高橋│2/2│9:02 高橋│2/3│9:03 【テーブル名:シフト】 氏名│日付│シフト ────────────────── 鈴木│2/1│A 鈴木│2/2│B 鈴木│2/3│A 高橋│2/1│B 高橋│2/2│C 高橋│2/3│B 【クエリ:シフト勤怠データ】←作りたいもの 氏名│日付│シフト│出勤時刻 ────────────────── 鈴木│2/1│A│8:01 鈴木│2/2│B│8:02 鈴木│2/3│A│8:03 高橋│2/1│B│9:01 高橋│2/2│C│9:02 高橋│2/3│B│9:03 氏名と日付のフィールドが一致するときに結合させたいのですが、 デザイン画面でつなげればいいのかわかりません。 ご回答よろしくお願い致します。

専門家に質問してみよう