Accessユニオンクエリで複数テーブルを連結する方法

概要

この記事の結論
Accessのユニオンクエリは、複数のSELECT結果を縦につなぎます。[クエリ デザイン]からSQLビューを開き、SELECT文をUNIONで結びます。UNIONは結果行の重複を除き、UNION ALLは重複も残します。

この記事でわかること

  • 列数と列の順番を揃える
  • SQLビューでUNION ALLを作る
  • UNIONとUNION ALLの違いを確認する
  • 並び順と条件を正しい位置に書く

この記事の主な内容

  1. UNIONは行を縦に連結する
  2. 列数と列の順番を揃える
  3. SQLビューでUNION ALLを作る
  4. UNIONとUNION ALLの違いを確認する
  5. 並び順と条件を正しい位置に書く
  6. 集計と運用上の制約を確認する
  7. よくある質問

想定読了時間:約8分


1 UNIONは行を縦に連結する

Accessのユニオンクエリは、複数のSELECT結果を縦につなぎます。[クエリ デザイン]からSQLビューを開き、SELECT文をUNIONで結びます。UNIONは結果行の重複を除き、UNION ALLは重複も残します。

商品情報と売上を横へつなぐJOINとは目的が異なります。
月別の同じ構造の表をまとめる場面などで使えますが、結果を表示するだけで元テーブルが統合されるわけではありません。

JOINとUNIONの違いについて、JOIN、UNIONの関係を示す図

2 列数と列の順番を揃える

T_売上9月とT_売上10月から、売上日・商品コード・金額の順に取得します。
各SELECTの列数は同じにし、対応する位置のデータ型や意味を揃えてください。
SELECT *は列追加の影響を受けるため、必要な列を明示する方が保守しやすくなります。

列名が同じでも、位置が違うと意図しない組み合わせになります。
結果の列名は原則として最初のSELECTの名前を使うため、別名も先頭で整えます。

揃える3つの条件について、列数、列順、型の関係を示す図

3 SQLビューでUNION ALLを作る

取引データは同じ日付・商品・金額の別取引もあり得ます。
件数を勝手に減らさないため、まずUNION ALLで結合する例を示します。
元の表名や列名は実際の定義へ置き換えてください。

UNION ALLの流れについて、9月の表、10月の表、統合結果の関係を示す図

操作手順

1. 新しいクエリを作りSQLビューを開きます。

2. 2つのSELECTとUNION ALLを入力します。

3. Q_売上統合として保存します。

4. 結果件数が2表の合計と一致するか確認します。

サンプルコードと式

SELECT [売上日], [商品コード], [金額] FROM [T_売上9月]
UNION ALL
SELECT [売上日], [商品コード], [金額] FROM [T_売上10月]
ORDER BY [売上日], [商品コード];

重複の扱いについて、UNION、UNION ALLの関係を示す図。

4 UNIONとUNION ALLの違いを確認する

UNIONの重複判定は、選択した列全体の値に対して行われます。
主キーを選択しなければ、別取引でも選択列がすべて同じなら1行になることがあります。
表示上の重複を減らしたい場合と、取引件数を保持したい場合を区別しましょう。

出所を示す固定文字列を追加すると、月やシステムの判別が容易です。
ただし出所が違えば別の結果行になるため、UNIONの重複除外結果も変わります。

サンプルコードと式

SELECT “9月” AS 出所, [売上日], [金額] FROM [T_売上9月]
UNION ALL
SELECT “10月”, [売上日], [金額] FROM [T_売上10月];

出所列を追加するについて、9月表、10月表、結果の関係を示す図

5 並び順と条件を正しい位置に書く

全体の並び順は末尾のORDER BYで指定します。
各SELECTのWHEREはその表の対象範囲を絞る条件です。
片方にだけ条件を入れると、もう片方の不要データが残るため確認してください。

一方の表に存在しない列は、Null AS 列名のように位置を合わせる方法があります。
ただし型の推定や演算に影響するため、最初のSELECTで意味と型が明確な列構成にすることが重要です。

条件と並び順について、WHERE、ORDER BYの関係を示す図

既存Accessへの影響を判断できない場合

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


6 集計と運用上の制約を確認する

UNION結果は通常、直接編集する用途には使えません。
保存したユニオンクエリを別の選択・集計クエリの入力にし、合計金額と件数を元データと照合します。

毎月新しいテーブルを作り続けるとSQLの修正が増えます。
継続運用では1つの売上テーブルに日付を持たせる設計も検討しましょう。
UNIONは異なる保存先を読み取る手段であり、保存設計の問題をすべて解決する機能ではありません。

統合後の確認について、件数、金額、編集、設計の関係を示す図

7 よくある質問

列数と順番、意味と型を揃えます。
名前は最初のSELECTの列名が基準です。

UNIONが選択列全体の重複を除外している可能性があります。
必要ならUNION ALLを使います。

通常は直接編集できません。
元表や別の更新処理で行います。

まとめ

毎月新しいテーブルを作り続けるとSQLの修正が増えます。
継続運用では1つの売上テーブルに日付を持たせる設計も検討しましょう。
UNIONは異なる保存先を読み取る手段であり、保存設計の問題をすべて解決する機能ではありません。

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


参考情報

Microsoft公式資料を参照しています。サンプルは説明用の架空データです。
Windows版Accessの実機検証は未実施のため、適用前に対象環境のコピーで結果を確認してください。

Microsoft:UNION
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/union-operation-microsoft-access-sql

Microsoft:複数クエリの結合
https://support.microsoft.com/en-us/access/use-a-union-query-to-combine-multiple-queries-into-a-single-result

TOP