Accessのテーブル結合方法と種類

概要

この記事の結論
Accessのクエリで複数テーブルを結合すると、共通するIDを基準に列を横へ組み合わせられます。一致した行だけなら内部結合、片側の全行を残すなら外部結合を使います。どの行を残すかを先に決めることが重要です。

この記事でわかること

  • 同じ意味と対応する型のキーを用意する
  • 内部結合で一致する行を取り出す
  • 外部結合で未一致の行も残す
  • 行が増える原因と消える条件を調べる

この記事の主な内容

  1. 結合は関連する列でテーブルを横につなぐ
  2. 同じ意味と対応する型のキーを用意する
  3. 内部結合で一致する行を取り出す
  4. 外部結合で未一致の行も残す
  5. 行が増える原因と消える条件を調べる
  6. 未一致や集計前後の件数を照合する
  7. よくある質問

想定読了時間:約8分


1 結合は関連する列でテーブルを横につなぐ

Accessのクエリで複数テーブルを結合すると、共通するIDを基準に列を横へ組み合わせられます。
一致した行だけなら内部結合、片側の全行を残すなら外部結合を使います。
どの行を残すかを先に決めることが重要です。

クエリのJOINは、そのクエリの取得方法です。
データベース全体の関係を定義するリレーションシップや、参照整合性の設定と同じではありません。

結合とリレーションシップについて、JOIN、関連設定、参照整合性の関係を示す図。

2 同じ意味と対応する型のキーを用意する

M_顧客とT_受注を顧客IDでつなぎます。同じ名前の列でも、意味が異なれば結合してはいけません。
親の顧客IDは重複なし、子の顧客IDは複数の受注で同じ値を保存できる構造です。

親と子の対応について、顧客1、受注101、受注102の関係を示す図。

親が通常のオートナンバーの場合、子は数値型の長整数を使います。
文字列の001と数値の1を見た目だけで同じと判断せず、型と保存値を揃えてください。

設定例と確認点

表例意味
M_顧客1 青葉商店/2 南商店顧客ごとに1行
T_受注101 顧客1/102 顧客11顧客に複数行

3 内部結合で一致する行を取り出す

クエリへ上記の2表を追加し、対応する顧客IDをドラッグして結合線を作ります。
結合線をダブルクリックして、両方の結合フィールドが一致する行だけを含める設定を選びます。

サンプルでは青葉商店が受注101・102の2行に現れ、受注のない南商店は出ません。
名称が繰り返されても、受注明細を表示する目的なら正しい結果です。

サンプルコードと式

SELECT C.[顧客ID], C.[顧客名], O.[受注ID]
FROM [M_顧客] AS C INNER JOIN [T_受注] AS O
ON C.[顧客ID]=O.[顧客ID];

左外部結合の結果について、左の顧客、右の受注、未受注の関係を示す図。

4 外部結合で未一致の行も残す

全顧客を出したい場合は、M_顧客側をすべて含む結合を選びます。
SQLでは左側の表を残すLEFT JOINを使えます。
受注がない顧客の受注側の列にはNullが入ります。

RIGHT JOINは右側を残します。
左右という言葉だけで覚えるのではなく、SQLのFROM句でどの表を置いたか、デザイン画面でどちらを全件残すかを確認しましょう。

サンプルコードと式

SELECT C.[顧客名], O.[受注ID]
FROM [M_顧客] AS C LEFT JOIN [T_受注] AS O
ON C.[顧客ID]=O.[顧客ID];

行数が増える理由について、元の行、相手の行、結果の関係を示す図。

5 行が増える原因と消える条件を調べる

結合先のキーが重複していると、1行に複数の相手が対応して行数が増えます。
DISTINCTで見えなくする前に、1対多が必要な結果か、誤った結合かを確認してください。

LEFT JOINの後で受注側に WHERE [受注金額]>0 と指定すると、受注のない行はNullのため除かれます。
対象受注を先にクエリで絞ってから外部結合するなど、全顧客を残す意図に合う構成にします。

外部結合後の条件について、未受注、金額条件、結果の関係を示す図。

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

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


6 未一致や集計前後の件数を照合する

テーブルの件数、結合後の件数、主キーの重複を比較します。
未受注顧客だけならLEFT JOIN後に受注IDの Is Null を判定できます。
受注IDが必ず存在する主キーであることが前提です。

Access SQLはFULL OUTER JOINをそのまま指定できません。
必要なら左右の未一致をUNIONで組み合わせます。
複雑な集計では、先に各表を必要な単位へ集計してから結合すると、多重加算を防ぎやすくなります。

結合結果の確認について、件数、ID、未一致、集計の関係を示す図。

7 よくある質問

いいえ。クエリの結合とリレーションシップの参照整合性は別に設定します。

受注が複数あれば通常の1対多です。必要な結果の単位を確認してください。

結合後のWHERE条件でNullの行を除いていないか確認します。

まとめ

Access SQLはFULL OUTER JOINをそのまま指定できません。
必要なら左右の未一致をUNIONで組み合わせます。
複雑な集計では、先に各表を必要な単位へ集計してから結合すると、多重加算を防ぎやすくなります。

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


参考情報

Microsoft:内部結合
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/inner-join-operation-microsoft-access-sql

Microsoft:外部結合
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/left-join-right-join-operations-microsoft-access-sql

TOP