ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:ACCESS テーブルの結合) ACCESS テーブルの結合方法を学ぼう! 2012/11/27 10:40 この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つに結合できるのでしょうか。 ご教授の程、宜しくお願い致します。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー m3_maki ベストアンサー率64% (296/460) 2012/11/27 15:01 回答No.1 UNION ALL で 重複するレコードも抽出されます。 SELECT A.製品コード, A.数量, A.受注日 FROM A UNION ALL SELECT B.製品コード, B.数量, B.受注日 FROM B; 質問者 お礼 2012/11/27 19:58 早速のご回答ありがとうございます。 単純にUNIONだけでは重複するレコードは除外されてしまうんですね。。 UNION ALL とすることで、全てのレコードが抽出されました。 勉強になりました。ありがとうございました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピューターデータベースその他(データベース) 関連する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等をいろいろためしてみたのですがうまくいきません。 おわかりの方、方教えてください。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム 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文を教えてください。よろしくお願いします。 UNIONする際、片方テーブルしかないカラムも利用 UNIONする際、片方のテーブルしかないカラムも利用したいのですが、どうすればよいでしょうか? ■現状 SELECT tablename, id, level FROM ( SELECT \'A\' tablename, s.id, s.level FROM A s UNION ALL SELECT \'B\' tablename, r.group_id, r.level FROM B r ) as UNI ■やりたいこと ・テーブルAにしかないカラム「age」も一緒にSELECTしたいのですが、どうすれば良いでしょうか? ・UNIONしたいわけではなく、UNIONした後のレコード同様、「age」カラムもSELECTしたい、という意味です ・UNIONの外側で何かやればいいのかな、と思い試したのですが、うまくいきませんでした AccessのSQLについて Access2000のSQLについての質問です。 コード 数量 ------------ A 3 A 2 A 1 B 2 B 3 の上記のテーブルからコードの部分を 単に重複なく抽出するにはどのようにdistinctを 使用すればいいのでしょうか? 希望結果(例) コード 数量 ------------ A (1-3のどれでもよい) B (2-3のどれでもよい) select distinct コード、数量 from Table にすると コード 数量 ------------ A 3 A 2 A 1 B 2 B 3 こうなってしまい、希望どおりにいきません。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 異なるテーブルを結合(?)してdateで並べ替えたいと思っております。 結合、UNIONを用いても解決できない処理があって質問させていただきます。 現在、異なる3つのテーブルが以下のような状況であります。 ---------- テーブルA フィールドa、b、c(処理日時) テーブルB フィールドd、e、f(処理日時) テーブルC フィールドg、h、i(処理日時) ---------- これらのデータを用いて、単純に外部結合すると、フィールドがa~iまである表にできると思います。 そして、処理日時であるc、f、iをもちいて順番を並べたいと思っています。 しかし、フィールドが違うcfiをレコードを並べ替える基準にする方法が分かりません。 UNIONを使えば、処理日時をあわせられると知り、ためしに、それであわせてみましたが、他のフィールドも合わさってしまうので、(a、d、gが合わさるのは問題なかったんですが、)b、e、hが別のフィールドになっていないことで不具合がおきてしまいました。 ちなみに、c、f、iの型はdateです。 型が同じであることを利用したりできればいいんでしょうが、 このように、複数のテーブルの中の一部を並べ替えの基準にする方法をご存知の方いらっしゃいましたらご教示頂ければ幸いでございます。 質問が分かりにくくて申し訳ありません。 恐れ入りますが、何卒よろしくお願い申し上げます。 ACCESS テーブルの結合 同じmdb内で複数テーブルがあります。(テーブル1から10まで)フィールド名はすべて同じです。それぞれのテーブルのIDは1からオートナンバーになってます。 【例】 テーブル1 フィールド名: ID A B C テーブル2 フィールド名:ID A B C ・ ・ テーブル10 フィールド名:ID A B C ひとつのテーブルで管理したいのですが・・・教えてください。 2つのテーブルの合算値に関して 教えて下さい。 SQLに関してです。 ある2つのテーブルの集計(数量の合算)をSQLで行いたいと考えています。 そこで、UNION ALL を使い集計させる事ができましたが、その中で、1つのテーブルに 条件を加えたいと考えています。 つまり、副問い合わせのような形にできないかと考えています。 《テーブル》 T_在庫日次 品目番号 場所コード 数量 処理区分 T_在庫月次 品目番号 場所コード 数量 《現状のSQL》 Select 場所コード,品目番号, SUM(数量) AS 数量 From ( Select 場所コード,品目番号, 数量 From T_在庫日次 UNION ALL Select 場所コード,品目番号, 数量 From T_在庫月次 ) Group By 場所コード,品目番号 上記のSQLに対し、T_在庫日次 の処理区分が ‘10’ のデータに対するT_在庫日次とT_在庫月次の数量の 合計を求めたいと考えています。 SQLの記述で計算までして取得する事はできないでしょうか??? 教えて頂ければ幸いです。 よろしくお願いします。 集計結果を別テーブルに更新クエリで書き出したい。 Access2000を使っています。 テーブルとフィールドの関係は次のようになっています。 (一部、Northwind.mdbを使っています。) 受注 ---------------------- 得意先コード 受注コード 受注明細 ---------------------- 受注コード 単価 数量 売上集計 ---------------------- 得意先コード 合計 受注明細テーブルの単価と数量を掛け合わせたものの合計を 売上集計テーブルの合計に書き出したいと思います。 次の選択クエリの合計の値を売上集計テーブルの取引先コード の一致する場所に書き出したいのです。 SELECT 受注.得意先コード, Sum([単価]*[数量]) AS 合計 FROM 受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード GROUP BY 受注.得意先コード; 売上集計テーブルと受注テーブルの得意先コードは同じものが 存在します。 よろしくお願いします。 Accessで、別のテーブルにある同じフィールドを結合する(至急) いつも大変お世話になっております。m(_ _)m 分かりましたら、至急お願いしたいのですが Accessで、別々のテーブル(またはクエリ)に同じ「型番」「数量」というフィールドがあって、それぞれ別々の情報が入っています。 それを、1つに結合することは可能ですか? 例) テーブルA: 型番/数量 ABC/5 DEF/3 テーブルB: GHI/2 JKL/3 この2つのテーブル(A・B)を1つのフィールドに表示したい。 型番/数量 ABC/5 DEF/3 GHI/2 JKL/3 というように。。。 Accessの基本にのっとっていないのかもしれませんが、何とかできたらと思います。できるだけ簡単な方法で・・・ どうぞよろしくお願いします。 ACCESS 以下のようなレコードを抽出するSQL ACCESSのデータベースで あるフィールド(フィールドAとします)の値に対して、 別のフィールド(フィールドBとします)の値が1つに決まる データベースがあるとします。 例えば、フィールドAの値が1のレコードは、 どのレコードもフィールドBの値はaである。など このようなデータベースでこのような関係になっていないレコード 例えば、フィールドAの値が1のレコードの中に フィールドBの値がaであるレコードと フィールドBの値がbであるレコードがある。など を抽出するSQLはどのように記述すればよいでしょうか。 テーブル名はTABEL1とします。 次の2つのケースでお願いします。 (1)フィールドAの値が異なればフィールドBの値が異なる場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが ある時、フィールドAの値が1でないレコードの中には、 フィールドBの値がaであるレコードが存在しない場合 (2)フィールドAの値が異なるがフィールドBの値が同じこともある場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが あっても、フィールドAの値が1でないレコードの中にも、 フィールドBの値がaであるレコードが存在する場合 【回答例】(ただし、1,a,bなどの具体的な値は使わないこと) ・フィールドAの値が1のレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1; ・フィールドAの値が1でフィールドBの値がaのレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1 AND フィールドB='a'; ・フィールドAの値が1でフィールドBの値がaのレコードと フィールドAの値が1でフィールドBの値がbのレコードを表示する例 SELECT * FROM TABLE1 WHERE (フィールドA=1 AND フィールドB='a') OR (フィールドA=1 AND フィールドB='b'); この目的は、データベースに問題があり、 問題となっているレコードを見つけて直したいのです。 よろしくお願いします。 同じテーブルでのUNION テーブルtableである列aのデータが1,2,3,4,5,6,7,8,9と 入っていたとします。 このテーブルを1,2,5,3,4,6,7,8,9という順番で SELECTしたい場合はどのようにすればよろしいでしょうか? select a from table where a IN (1,2) union select a from table where a = 5 union select a from table where a NOT IN (1,2,5) としてみたのですが1,2,3,4,5,6,7,8,9と表示されてしまいます。 宜しくお願いいたします。 Access2003 一つのクエリで結果を出したい お世話になります。 下記テーブルを紐付けてクエリを作成します(Access2003)。 受注テーブル ・ID ・コード ・数量 検品テーブル ・ID ・コード ・検品フラグ マスターテーブル ・ID ・コード ・印刷フラグ 検品テーブルのレコードは、受注テーブルの数量合計が展開されたレコード数となります。例えば、AAAというコードで数量合計が8の場合、検品テーブルではAAAのレコードが8レコード存在することになります。 但し、マスターテーブルの印刷フラグがYesとなっているものは、数量がいくつあっても受注テーブルは1レコード作成されます(数量合計で展開しない)。 受注テーブル ID コード 数量 1 AAA 5 2 AAA 3 3 BBB 100 検品テーブル ID コード 検品フラグ 1 AAA Yes 2 AAA Yes 3 AAA Yes 4 AAA Yes 5 AAA Yes 6 AAA Yes 7 AAA No 8 AAA Yes 9 BBB Yes マスターテーブル ID コード 印刷フラグ 1 AAA No 2 BBB Yes こんな感じです。 そこで各テーブルをコードで紐付けてグループ化し、検品フラグYesで抽出した状態で以下の結果を表示出来るようにしたいところです。 コード 数量合計 AAA 7 BBB 100 要するに印刷フラグがYesのものは受注テーブルの数量合計を表示し、それ以外は検品された数を表示させたいと考えています。 あらかじめ受注テーブルでコードでグループ化し、数量の合計を算出するクエリ(※1)を作成し、そのクエリと検品テーブル、マスターテーブルを紐付けたらうまく表示出来ました。 ※数量合計はIIFで印刷フラグ=Yesの場合は※1の数量合計を、Yesではない場合は検品テーブルのレコードカウント数を表示。 しかし、できれば一つのクエリで上記の結果を表示させたいのですが、可能なのでしょうか。 ご教授お願い致します。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター データベース SQL ServerOraclePostgreSQLMySQLNoSQLその他(データベース) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
早速のご回答ありがとうございます。 単純にUNIONだけでは重複するレコードは除外されてしまうんですね。。 UNION ALL とすることで、全てのレコードが抽出されました。 勉強になりました。ありがとうございました。