概要
| この記事の結論 Accessのクエリで複数テーブルを結合すると、共通するIDを基準に列を横へ組み合わせられます。一致した行だけなら内部結合、片側の全行を残すなら外部結合を使います。どの行を残すかを先に決めることが重要です。 |
この記事でわかること
- 同じ意味と対応する型のキーを用意する
- 内部結合で一致する行を取り出す
- 外部結合で未一致の行も残す
- 行が増える原因と消える条件を調べる
この記事の主な内容
- 結合は関連する列でテーブルを横につなぐ
- 同じ意味と対応する型のキーを用意する
- 内部結合で一致する行を取り出す
- 外部結合で未一致の行も残す
- 行が増える原因と消える条件を調べる
- 未一致や集計前後の件数を照合する
- よくある質問
想定読了時間:約8分
1 結合は関連する列でテーブルを横につなぐ
Accessのクエリで複数テーブルを結合すると、共通するIDを基準に列を横へ組み合わせられます。
一致した行だけなら内部結合、片側の全行を残すなら外部結合を使います。
どの行を残すかを先に決めることが重要です。
クエリのJOINは、そのクエリの取得方法です。
データベース全体の関係を定義するリレーションシップや、参照整合性の設定と同じではありません。

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

親が通常のオートナンバーの場合、子は数値型の長整数を使います。
文字列の001と数値の1を見た目だけで同じと判断せず、型と保存値を揃えてください。
設定例と確認点
| 表 | 例 | 意味 |
|---|---|---|
| M_顧客 | 1 青葉商店/2 南商店 | 顧客ごとに1行 |
| T_受注 | 101 顧客1/102 顧客1 | 1顧客に複数行 |
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で組み合わせます。
複雑な集計では、先に各表を必要な単位へ集計してから結合すると、多重加算を防ぎやすくなります。

7 よくある質問
いいえ。クエリの結合とリレーションシップの参照整合性は別に設定します。
受注が複数あれば通常の1対多です。必要な結果の単位を確認してください。
結合後のWHERE条件でNullの行を除いていないか確認します。
まとめ
Access SQLはFULL OUTER JOINをそのまま指定できません。
必要なら左右の未一致をUNIONで組み合わせます。
複雑な集計では、先に各表を必要な単位へ集計してから結合すると、多重加算を防ぎやすくなります。
本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。