2つのテーブルを比較し、片方にしか存在しないレコードを抽出する (SQL)

  同じフィールドを持つ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の チェックを持ってきて下さい。
Access97/2000



戻る


Excel Word Access VBA! モーグ