みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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でも、どちらでも結果が同じになる・・・という
ことであってますでしょうか?

ご教示の程、宜しくお願い致します。

投稿日時 - 2015-01-30 15:20:00

QNo.8907580

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

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

投稿日時 - 2015-01-30 15:42:57

お礼

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でいいのかなと。
しかし、以前いけてたもの、テスト環境でもいけてたものが、何故実環境だと
うまくいかないのかが不思議です。

投稿日時 - 2015-01-30 16:24:32

あなたにオススメの質問