たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_SQLによるテーブルの結合その3【不一致レコード】【UNION】

SQLを使ってテーブルを結合する方法
事前にリレーションシップが可能なテーブルを準備しておく

一方のテーブルにのみ存在するレコードの抽出

・外部結合で結合した際、一方のテーブルにレコードがない場合にはNull値が入る
・そのNull値を利用し、一方のテーブルに存在してもう一方のテーブルに存在しないレコードを抽出する

基本構文

SELECT [両テーブルのうち、表示したいフィールド]
 FROM テーブルA LEFT JOIN テーブルB
  ON テーブルA.結合フィールド = テーブルB.結合フィールド
   WHERE テーブルA.結合フィールド IS NULL;


▼記述例▼

Sub LeftJoin_test()
 Dim JOINSQL  As String
 JOINSQL = "SELECT テーブルA.郵便番号,都道府県,市区町村"& _
 "FROM テーブルA LEFT JOIN テーブルB" & _
 "ON テーブルA.郵便番号=テーブルB.郵便番号
 "WHERE テーブルA.郵便番号 IS NULL;"

 CurrentDb.QueryDefs("POSTCODEクエリ").SQL = JOINSQL 'クエリ名をセット
 DoCmd.OpenQuery"POSTCODEクエリ" '実行
End Sub
End Sub



テーブルとテーブル(またはクエリ)を結合【UNION演算子

・各テーブル・各クエリのレコード構造が同じ場合にUNIONを使用できる
・結合したテーブルやクエリに同じレコードがある場合、重複は削除される
 →重複を削除したくない場合には「UNION ALL」のようにALL述語を追記する

UNIONの基本構文

SELECT フィールドA, フィールドB, フィールドC,....
 FROM テーブル1
  UNION
   SELECT フィールドA, フィールドB, フィールドC,....
    FROM テーブル2

▼記述例▼

Sub UnionJoin_test()
 Dim JOINSQL  As String
 JOINSQL = "SELECT * FROM テーブル1"& _
 "UNION" & _
 "SELECT * FROM テーブル2:"

 CurrentDb.QueryDefs("POSTCODEクエリ").SQL = JOINSQL 'クエリ名をセット
 DoCmd.OpenQuery"POSTCODEクエリ" '実行
End Sub



テーブルの結合解説 その1
tama-shi.hatenadiary.com
テーブルの結合解説 その2
tama-shi.hatenadiary.com