• 締切済み
  • すぐに回答を!

UNIONとUNION ALLの違いについて

お世話になります。 一応違いについては把握しておりますが、念のため 確認させて下さい。 以下のクエリがあります。 クエリA  受注日   型番  数量の合計  2015/01/01 AAA   10  2015/01/01 BBB   5 クエリB  受注日   型番  数量の合計  2015/01/01 BBB   5  2015/01/01 CCC   10  2015/01/02 CCC   5 クエリA UNION クエリB の場合は、  受注日   型番  数量の合計  2015/01/01 AAA   10  2015/01/01 BBB   5  2015/01/01 CCC   10  2015/01/02 CCC   5 となると思ってます。 ※型番Bの重複がマージされる クエリA UNION ALL クエリB の場合は、  受注日   型番  数量の合計  2015/01/01 AAA   10  2015/01/01 BBB   5  2015/01/01 BBB   3  2015/01/01 CCC   10  2015/01/02 CCC   5 となると思ってます。  ※重複があっても単純にくっつける。 あってますでしょうか? で、例えば、テーブルA及びBにそれぞれ「ライン」という項目があり、 テーブルAの方は、L01、L02となっており、テーブルBの方は LL01、LL02となっていたとしたら(要するにテーブルAのラインと テーブルBのラインが重複することが無い)、UNIONでも UNION ALLでも、どちらでも結果が同じになる・・・という ことであってますでしょうか? ご教示の程、宜しくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数912
  • ありがとう数6

みんなの回答

  • 回答No.1

2つのテーブルに重複がなければ、結果は同じになりますが、UNION だと、重複がないかチェッするという処理が入りますから、その分、重くなりますね。 重複がないことが分かってる、あるいは、重複をはじく必要がないなら、UNION ALL の方がいいでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

hatena1989様 早速のご回答ありがとうございます。 >その分、重くなりますね。 仰る通りなのですが。。何故かUNION ALLとすると「クエリが複雑すぎます」 というエラーになってしまうのです。 実際にはこのユニオンクエリ(クエリXとします)を使って、更に他のクエリ を3つほど紐付けてクエリを作成しております。  クエリX------クエリ1       |        --クエリ2       |        --クエリ3 で、このクエリを開くと「クエリが複雑すぎます」となり、クエリXで UNIONとすると、普通に開けるようになるのです。 ちなみにクエリXは数年前に作成したのですが、今までUNION ALL でいけてました。 ※実は、以前に同じ症状となり質問を投稿させて頂きました。  http://okwave.jp/qa/q8035314.html  で、恐らく何かやってUNION ALLでいけるようになったと思うのですが  何をやったか忘れてしまい。。 今回クエリXに2つフィールドを追加しましたが、テスト環境ではUNION ALL で問題無くいけてたのですが、実環境だと何故か「クエリが複雑すぎます」 となります。 テスト環境も実環境も同じOS、同じバージョンのAccessです。 ※最適化/修復もやってみましたが変わらず。 とりあえず、UNIONとすることによりエラーは解消され、例にも挙げました通り クエリAとクエリBは重複することが無いので、このままUNIONでいいのかなと。 しかし、以前いけてたもの、テスト環境でもいけてたものが、何故実環境だと うまくいかないのかが不思議です。

関連するQ&A

  • 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ではない場合は検品テーブルのレコードカウント数を表示。 しかし、できれば一つのクエリで上記の結果を表示させたいのですが、可能なのでしょうか。 ご教授お願い致します。

  • ACCESSクロス集計クエリ

    accessクロス集計クエリで質問があります。 このようなテーブルがあります。(テーブル名:売上T) 売上年月,営業所,商品,数量,重量,売上金額 2013/08,東京,AAA,1,5,500 2013/07,名古屋,AAA,2,10,1000 2013/08,東京,BBB,3,30,900 2013/06,東京,CCC,4,50,4000 2013/05,大阪,AAA,5,25,2500 2013/08,東京,CCC,6,50,6000 2013/07,大阪,AAA,7,35,3500 2013/08,東京,AAA,8,40,4000 2013/06,名古屋,BBB,9,90,2700 2013/08,東京,AAA,10,50,5000 これをクロス集計クエリにて 営業所・商品をグループ化し売上年月毎で数量合計・重量合計・売上合計 と3つの表を作っているのですが 数量合計/重量合計/金額合計を同時に表示する事は可能でしょうか? やりたいこと 営業所・商品/2013/07,2013/07,2013/08 東京AAA/(数・重・売),(数・重・売),(数・重・売) 東京BBB/(数・重・売),(数・重・売),(数・重・売) 東京CCC/(数・重・売),(数・重・売),(数・重・売) 大阪AAA/(数・重・売),(数・重・売),(数・重・売) 大阪BBB/(数・重・売),(数・重・売),(数・重・売) 大阪CCC/(数・重・売),(数・重・売),(数・重・売) 名古屋AAA/(数・重・売),(数・重・売),(数・重・売) 名古屋BBB/(数・重・売),(数・重・売),(数・重・売) 名古屋CCC/(数・重・売),(数・重・売),(数・重・売) エクセルに吐き出しピボットとかではなく、ACCESSの中で完了させたく思っています。 ちなみにACCESS2003/WIN XPの環境です。 どなたかアドバイスいただければ幸いです。

  • Access レポートの改ページについて

    お世話になります。 以下のテーブルがあります。  受注日     型番    納期  2015/01/01 AAA   2015/01/05  2015/01/01 BBB   2015/01/05  2015/01/01 CCC   2015/01/06  2015/01/01 DDD   2015/01/06 で、このテーブルをソースとしてレポートを作成したいのですが、 「納期」で改ページさせたいところです。 なので、このテーブルをレポートで開くと、  納期:2015/01/05 ← ヘッダー  受注日     型番  2015/01/01 AAA  2015/01/01 BBB  納期:2015/01/06 ← ヘッダー  受注日     型番  2015/01/01 CCC  2015/01/01 DDD と、2ページになって欲しいのですが。。 どのようにすれば、このように改ページできるように なりますでしょうか。 ご教示の程、宜しくお願い致します。

  • 重複レコードの合計について

    Access に詳しい方、教えて下さい。 下記のような2つのテーブルがあったとします。 コードテーブル 001 AAA 002 BBB 003 CCC 明細テーブル 001 ・・・ 002 ・・・ 001 ・・・ 001 ・・・ 002 ・・・ コードテーブルと明細テーブルをつきあわせてレコードの合計を 求めたいと思っています。(下記のような結果になるように) 001 3 002 2 003 0 重複クエリで出来るのかと思っていますが、なかなか分かりません。 どなたか分かる方いらっしゃいますでしょうか? どうかよろしくお願い致します。

  • Accessによる集計方法について

    Accessによる集計方法について kamuycikapです。 下記のデータベースを利用して集計作業を行うときの、クエリ作成方法についてご教示願います。 <やりたいこと> キーとなるコード別に数量を合計計算したい。 <データベース> |キー|数量| AAA 1 AAA 3 AAA 4 CCC 5 BBB 2 BBB 9 <求める結果> |キー|合計数量| AAA 8 BBB 11 CCC 5 上記条件でのクエリ作成について、識者様からのアドバイスをお願い致します。 マクロ等のサンプルはGoogle検索でひっかかりましたが、出来る限りクエリでカバーしたいと思いますし、クエリを使えば実現できるのではないかと思っています。 今も、Access起動してクエリを試行錯誤しております。

  • AccessのUNION ALLについて

    よろしくおねがい致します。 最近アクセスを使い始めたものです。あるテーブルとテーブルの和集合を表示したクエリを作成したいのですが、デザインモードで作成することはできますでしょうか?直にSQL文でUNION ALLを使用すればできたのですが、私の他にもAccess初心者が使用するため、なるべくSQL文を直接使わずにデザインモードで作成する必要があります。 ご教授の程よろしくお願いいたします。

  • アクセス2003 各売上日の直近仕入額を知るには?

    いつもお世話になっています。 クエリを使って次のようなことがしたいのですが可能でしょうか? 下記のような2つのテーブルがあるとします。 <仕入記録> [仕入ID]  [仕入年月日]   [商品名]   [数量]   [単価]   1     2007/04/01     AAA    1    1,000   2     2007/04/03     BBB    1    2,000   3     2007/05/06     AAA    1    1,200   4     2007/05/15     CCC    1     800   5     2007/06/08     BBB    1    2,200   6     2007/06/20     CCC    1     900 <売上記録> [売上ID]   [売上年月日]   [商品名]   [数量]   1      2007/04/25    AAA      1   2      2007/05/08    AAA      1   3      2007/05/08    BBB      1   4      2007/06/10    AAA      1   5      2007/06/10    BBB      1   6      2007/06/10    CCC      1 この時2つのテーブルを使って販売した商品の原価(仕入単価)を求めるクエリを作りたいのですがどのようにしたらよいのでしょうか? 仕入単価は、各商品の売上年月日以前かつ最も売上年月日に近い仕入れ時の単価にしたいと考えています。 上記の場合、希望するクエリの結果は下記のような感じです。 [売上ID]   [売上年月日]   [商品名]   [仕入単価]   1      2007/04/25    AAA      1,000   2      2007/05/08    AAA      1,200   3      2007/05/08    BBB      2,000   4      2007/06/10    AAA      1,200   5      2007/06/10    BBB      2,200   6      2007/06/10    CCC       800 ご指導よろしくお願いします。

  • SQL Server:UNIONで結合した結果にIDを追加するには?

    いつも参考にさせて頂いています。 下記のような、テーブル、tabAとtabBを UNIONした結果にcol1の昇順でIDカラムをを追加して 表示するにはどのようなSQL文を書けばよろしいでしょうか? ご存知の方、宜しくお願い致します。 【tabA】 col1 col2 --------- 100 AAA 110 BBB 120 CCC 【tabB】 col1 col2 --------- 200 XXX 210 YYY 220 ZZZ 【結果】 ID col1 col2 ------------ 1 100 AAA 2 110 BBB 3 120 CCC 4 200 XXX 5 210 YYY 6 220 ZZZ

  • <教えて下さい>Access 重複+表示

    ネットで調べてみましたが、上手く行かないので教えて頂けますか? <やりたいこと> ユーザ名 パーツナンバー シリアルナンバー 修理日 という項目が一つのテーブルにあり、例えば同じ品物でも何回も修理している事が有ります。 <例> ID ユーザ名 パーツナンバー シリアルナンバー 修理日 1  AAA社   111-111     AAA12345    2009/11/10 2  BBB社   222-222     AAA23456    2009/11/10 3  AAA社   111-111     AAA12345    2009/11/01 4  CCC社   111-111     AAA34567    2009/10/30 5  BBB社   222-222     AAA12345    2009/10/29 6  CCC社   111-111     AAA34567    2009/10/15 このようなテーブルから、 ID ユーザ名 パーツナンバー シリアルナンバー 修理日 1  AAA社   111-111     AAA12345    2009/11/10 2  BBB社   222-222     AAA23456    2009/11/10 4  CCC社   111-111     AAA34567    2009/10/30 5  BBB社   222-222     AAA12345    2009/10/29 と、このように、パーツナンバーとシリアルナンバーで重複の可能性があり、 もし重複していた場合は最新の日付のものを表示させ、重複していないデータと合わせて抽出したいです。 こういう抽出は、クエリで出来ますでしょうか?それともSQLを使うのでしょうか? 宜しくご教示お願いいたします。

  • 条件付の重複レコードの削除 (sqlite3)

    重複レコードの削除で、重複レコード内の日付が最も新しいのだけを残したいのですが sqlite3のクエリをどう書けるのでしょうか? 例えば以下のような構造で、keyの重複を削除するのですが、 keyごとにyear, monthのもっとも新しいのだけ残したのです。 よろしくお願いします。 id, key, year, month, value 1 , aaa, 2000,12, 1000 2 , bbb, 2001, 1, 600 3 , bbb, 2001, 4, 500 4 , bbb, 2000, 2, 400 5, ccc, 2001, 3, 300 6, ccc, 2001, 8, 200 クエリ実行の結果こうしたい↓ 1 , aaa, 2000,12, 1000 3 , bbb, 2001, 4, 500 6 , ccc, 2001, 8, 200

    • ベストアンサー
    • MySQL