Access VBA SQL 3つのテーブルを結合してデータを抽出する

AccessVBA開発

SQL「LEFT JOIN」を使って、3つ以上の表を結合させる方法

AccessVBA で普通に join を使うと、2つまでしか結合できません。
が、下のように結合した表を括弧で囲んでやり、それを1つの表としてやると、
3つ以上の表を結合できます。

※テーブル名:TA,TB,TC
※フィールド名:b,c,id
※「TAテーブル」の全レコードに、
「TAテーブルのbフィールド」と「TBテーブルのidフィールド」が一致する「TBテーブル」のレコード、
「TAテーブルのcフィールド」と「TCテーブルのidフィールド」が一致する「TCテーブル」のレコードを
結合させる
SELECT TA.*,TB.*,TC.* FROM ( TA LEFT JOIN TB ON ( TA.b = TB.id ) ) LEFT JOIN TC ON ( TA.c = TC.id ) ;

また、中学生?のころに習った、電池のつなぎ方を思い出して、イメージしてみると
並列つなぎと、直列つなぎでは結果が違います。
それぞれのつなぎ方で「LEFT JOIN」 でテーブルを3つ結合できます。

★並列
A–>B
└–>C

★直列
A–>B–>C

どちらも可能。

【並列の例】

※テーブル名:A,B,C
※フィールド名:BID,CID
※「Aテーブル」の全レコードに、
「AテーブルのBIDフィールド」と「BテーブルのBIDフィールド」が一致する「Bテーブル」のレコード、
「AテーブルのCIDフィールド」と「CテーブルのCIDフィールド」が一致する「Cテーブル」のレコードを
結合させる
SELECT ・・・
FROM (A LEFT JOIN B ON A.BID = B.BID) LEFT JOIN C AS C ON A.CID = C.CID;

【直列の例】

※テーブル名:A,B,C
※フィールド名:BID,CID
※「Aテーブル」の全レコードに、
「AテーブルのBIDフィールド」と「BテーブルのBIDフィールド」が一致する「Bテーブル」のレコード、さらに
「BテーブルのCIDフィールド」と「CテーブルのCIDフィールド」が一致する「Cテーブル」のレコードを
結合させる
SELECT ・・・
FROM (A LEFT JOIN B ON A.BID = B.BID) LEFT JOIN C AS C ON B.CID = C.CID;

おススメのSQL本はこちら

タイトルとURLをコピーしました