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; |