ACCESS テーブルの結合方法を学ぼう!

このQ&Aのポイント
  • AテーブルとBテーブルを結合する方法を学びましょう。
  • SQLのUNIONを使用して2つのテーブルを結合し、一つのテーブルとして表示する方法を説明します。
  • ただし、この方法ではレコード数が正しく抽出されない場合があるので要注意です。
回答を見る
  • ベストアンサー

ACCESS テーブルの結合

お世話になります。 テーブルA(約20万レコード)、B(6レコード)があり、共通しているフィールドは以下の通りです。  ・受注日  ・製品コード  ・数量 AとBのテーブルの共通しているフィールドを条件無しで1つのテーブルとして見立てたいと思っておりますがうまくいきません。 SELECT A.製品コード, A.数量, A.受注日 FROM A UNION SELECT B.製品コード, B.数量, B.受注日 FROM B; 上記SQLでエラーにはならないのですが、レコード数が本来約20万レコードあるはずが、7万レコードしか抽出されません。 SELECT A.製品コード, A.数量, A.受注日 FROM A; と SELECT B.製品コード, B.数量, B.受注日 FROM B; をそれぞれ分けてやると、レコード数に問題ありません。。 どのようにすれば2つのテーブルを1つに結合できるのでしょうか。 ご教授の程、宜しくお願い致します。

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

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

UNION ALL で 重複するレコードも抽出されます。 SELECT A.製品コード, A.数量, A.受注日 FROM A UNION ALL SELECT B.製品コード, B.数量, B.受注日 FROM B;

naoto0216
質問者

お礼

早速のご回答ありがとうございます。 単純にUNIONだけでは重複するレコードは除外されてしまうんですね。。 UNION ALL とすることで、全てのレコードが抽出されました。 勉強になりました。ありがとうございました。

関連するQ&A

  • ACCESS 受注数の集計について

    教えてほしいことがあります。 宜しくお願いします。 「受注履歴」というテーブルがありまして、このようなレイアウトになっています。 受注日   商品コード 受注数量 2009/11/01  95555    10 2009/11/22  95555    5 2009/12/01  95555    10 フィールドの受注日の形式は日付で商品コードはテキスト形式、数量は数値形式です。 そしてもう一つ以下のような「受注残」というテーブルがあり、上記テーブルの受注日からさか上った1ヶ月前の日と出荷できていない受注残数などのテーブルが以下のようにあります。 受注日の1ヶ月前の日   受注日   商品コード 受注残数 2009/10/02        2009/11/01  95555    3 2009/10/23        2010/11/22  95555    2 2010/11/02        2010/12/01  95555    4 この各レコードは受注した時に在庫がなかったため、出荷できなかった数量のリストなんです。(受注日の1ヶ月間の日というフィールドは、「受注日」-30日で追加したフィールドです。) そこで、受注日からさかのぼった1ヶ月間の受注数を調べたい、そして在庫計画の参考にしたいというのが目的なんです。 例えば2009/11/22に商品95555は5個受注していますが、 (テーブル受注履歴より) その日に出荷できなかった数量は2個でした。 (テーブル受注残より) そこで、この2009/11/22から以前の1ヶ月間にどれ位受注しているのか、これを出したいのです。これを[受注履歴]を見てみますと、2009/11/1に10個と2009/11/22の5個で合計15個となるのですが、この値を「受注残」のレコードの右側にでも表示できたら便利だなあと色々とクエリでやってはみたものの、ACCESS歴2ヶ月位の私は挫折・・。 書いていることが伝われば良いのですが。 どなたか良い方法をご存知でしたら教えていただきたく、お願いします。

  • テーブルの結合に付いて

    こんにちわ 2つのテーブルからデータを検索する方法に関してです。 テーブル AとB が有り、 お互いに、フィールド ExtID で関連付けがされているとします。 ここで、 SELECT A.NAME, B.ADDRESS FROM A INNER JOIN B ON A.ExtID = B.ExtID とする方法と SELECT A.NAME, B.ADDRESS FROM A,B WHERE A.ExtID = B.ExtID が有ります。 この2つに関して、違いとかメリット・デメリット有りましたら教えてください。 よろしくお願い致します。

  • テーブルの結合について

    テーブル結合に関するSQL文について質問させてもらいます。 DBはSQLServer2005です。 下記のような二つのテーブルがあります。 テーブルA コード A111 A111B A222 A333 テーブルB コード    数量  A111     1 A111B    2 A222     3 A222B    4 上記2つのテーブルから下記の結果を表示させたいのです。 コード    数量  A111     1 A111B    2 A222     7 A333     0 テーブルBのコードがテーブルAにある場合、そのまま数量を表示。 ない場合、コードの4桁目まででサマリした合計値を表示させたい。 LEFT JOIN等をいろいろためしてみたのですがうまくいきません。 おわかりの方、方教えてください。    

  • Accessユニオンクエリーで2つのテーブルを集計

    Accessのユニオンクエリーで2つのテーブルを集計したいのですが Aテーブル コード1 値 1    5 1    2 Bテーブル コード2 値 1    1 2    3 結果 コード 値 1    8 2    3 このような結果を得ることは出来ますでしょうか? SELECT Aテーブル.コード1 AS コード,Aテーブル.値 UNION SELECT Bテーブル.コード2 AS コード,Bテーブル.値 このように記述すると コード 値 1    5 1    2 1    1 2    3 このような結果になってしまうのですが・・

  • テーブル結合について、下記SQLをANSI結合の書き方で表したい。

    テーブル結合について、下記SQLをANSI結合の書き方で表したい。 select * from (select key from A union select key from B union select key from C) X, A,B,C where X.key=A.key(+) and X.key=B.key(+) and X.key=C.key(+) このSQLをANSI結合の記述で書きたいのですが、 (+)での結合文になれておらず試行錯誤しております。 下記のようなのかなとは模索しておりますが、 手元に実行環境がなくわかりません。 また、要所気付く点などありましたら、ご指摘願います。 select A.*, B.*, C.* from (select key from A union select key from B union select key from C) X, LEFT JOIN A ON X.key=A.key LEFT JOIN B ON X.key=B.key LEFT JOIN C ON X.key=C.key

  • Access select句でのサブクエリ

    Access2010でのサブクエリについてお教えください。 注文テーブル 商品コード,数量,フラグ A,3,x B,2,x C,1,x A,3,y B,4,y C,3,y このようなテーブルがあります。 SELECT 商品コード,数量 FROM 注文テーブル GROUP BY 商品コード A,6 B,6 C,4 やりたい事はフラグがxの数量も表示たいと思っています。結果としては、下記の結果が欲しいです。 A,6,3 B,6,2 C,4,1 select句でサブクエリを作りました。 SELECT 商品コード,数量,(SELCT 数量 FROM 注文テーブル WHERE フラグ='x' GROUP BY 商品コード) FROM 注文テーブル GROUP BY 商品コード しかしこのコードを実行すると、「このサブクエリでは1つのレコードしか返せません」と表示されます。 どこを修正したら正しいデータを取得することができるでしょうか?

  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • フィールド数の多すぎる・フィールド数が一定でないテーブルのデータ結合の仕方?

    私は、accessについてあまり詳しくないものなのですが、仕事上50近くあるデータを一つにまとめたいんです。 データは2つありまして、 1.それぞれのテーブルが微妙にフィールド数が異なる場合の結合  例)・Aのテーブルのフィールド名     名前 クラス名 出身県 出身コード 血液型 性別        ・Bのテーブルのフィールド名    名前 出身県 血液型 性別    ・Cのテーブルのフィールド名    名前 クラス名 出身コード 血液型    ⇒このように微妙に異なる。しかもレコード数がかなり多いのです。これは、ユニオンクエリは使えないですよね?何かいい方法はないでしょうか? 2.テーブルの構造は同じなのですが、フィールド数が多くてユニオンクエリを使おうとすると、『フィールド数が多すぎる』とエラーメッセージがでてしまう。この場合の対処方法でいいのはないでしょうか? なにぶん、私はaccessをあまり使わないのでわかりにくい質問だと思いますが、どなたかすみませんが教えてください。お願いします。

  • アクセスのテーブルを分ける理由に関して質問です。

    アクセスのテーブルを分ける理由に関して質問です。 現在参考書を利用してデータベースの勉強をしてます。 試行錯誤中で弱っています。 受注テーブル(受注コード、受注日、締切日、出荷日、顧客コード) 受注明細テーブル(受注コード、商品コード、数量) とテーブルが分かれている例題がありました。 テーブルを2つに分ける理由がよくわかりません。 もし1つのテーブル (受注コード、受注日、締切日、出荷日、顧客コード、商品コード、数量) などとまとめたら何か問題があるのでしょうか? どうぞよろしくお願いします。

  • SQL 複数のテーブルから重複なしでデータを取得

    同じフィールド名[名前]を持つテーブルが複数個あります。 仮にテーブル名を、A、B、C、Dの4個だとします。 それらのテーブルから、フィールド名[名前]のデータを重複なしで取得したいのですが、SQL文が思いつきません。 取得するフィールドは[名前]だけです。 select distinct(名前) from A union select distinct(名前) from B union select distinct(名前) from C union select distinct(名前) from D だと、各表に同じ名前が存在する場合は結果も重複してしまい、期待する結果が得られませんでした。 環境はOracle 9iです。 SQL文を教えてください。よろしくお願いします。