同じフィールドを持つ2つのテーブルを比較し、片方にしかないレコードを削
除する方法を説明します。
● 準備 ●
(1) 以下の構成で[商品マスタ]テーブルを作成します。
----------------------------------------
フィールド名 データ型
商品ID 整数型(主キー)
商品名 テキスト型
販売価格 通貨型
----------------------------------------
(2) 以下の構成で[販売履歴]テーブルを作成します
----------------------------------------
フィールド名 データ型
販売履歴ID オートナンバー(主キー)
商品ID 整数型
販売数量 整数型
----------------------------------------
(3) 両方のテーブルに適当なデータを入力します。
その際、[販売履歴] テーブルにはなくて、[商品マスタ] テーブルには存
在するレコードを作っておいて下さい。

● サンプル ●
Private Sub PickUp()
'■ 変数宣言 ■
Dim qDef As DAO.QueryDef
Dim DB As DAO.Database
Dim strSQL As String
'■ SQL文作成 ■
strSQL = strSQL & "Select * From 商品マスタ "
strSQL = strSQL & "Where [商品ID] Not In(Select 商品ID From 販売履歴)"
'■ 新規クエリの作成 ■
Set DB = CurrentDb
Set qDef = DB.CreateQueryDef("NewQuery", strSQL)
DB.QueryDefs.Refresh
'■ クエリを開く ■
DoCmd.OpenQuery "NewQuery"
'■ 終了処理 ■
Set qDef = Nothing
Set DB = Nothing
End Sub
● 動作確認 ●
上記プロシージャを実行して下さい。
サンプル通りのデータを入力すると、下記のようなクエリが表示されている
はずです。
● 詳細 ●
サンプルではサブクエリを使用して、片方のテーブルにしかないレコードを
ピックアップしています。
通常Where句では1つのレコードの値同士しか比較できませんが、サブクエリ
とIn句を使用することで、「From句のテーブルの1レコード 対 サブクエリ全体
のレコード」という形の比較を行うことができ、事実上全件を横断して比較す
ることが可能になります。
● 補足説明 ●
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、
Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOの
チェックを持ってきて下さい。
|