プロが教える店舗&オフィスのセキュリティ対策術

Access 2007で、テーブルからレコードを削除するクエリを作りたい。
具体的には、テーブルAのフィールドF1とテーブルBのフィールドF2があるとします。このとき、テーブルA中の各レコード(仮にXとします)であって、そのF1の値と同じ値をF2に持つレコードがテーブルBに含まれている場合は、(テーブルAから)そのレコードXを削除するという処理をしたいのです。ややこしいと思いますが、これをクエリやマクロで作ることはできるでしょうか?
私はVBAを知らない初心者です。上の処理も文章で書くと理解してもらえるかどうか不安ですが、だれか助けて下さい。

A 回答 (3件)

解決しましたか。

以下の要領で作成してみてください。
なお、(4)のSQL文はテーブル名、フィールド名は
質問のままなので、実際に合わせて変更してください。

(1)
クエリを「デザインビューでクエリを作成する」を選択。
(2)
テーブルの表示を閉じる
(3)
クエリをSQLビューに切り替える。
(4)
以下のSQL文をコピーし、SQLビューに貼り付け、保存する。

DELETE * FROM テーブルA
WHERE EXISTS ( SELECT * FROM テーブルB
WHERE テーブルB.F2 = テーブルA.F1 );


なお、保存後に一旦クエリを閉じ、再びクエリを
デザインビューで開いて、SQLビューで確認すると

DELETE Exists (SELECT * FROM テーブルB WHERE テーブルB.F2 = テーブルA.F1) AS 式1, *
FROM テーブルA
WHERE (((Exists (SELECT * FROM テーブルB WHERE テーブルB.F2 = テーブルA.F1))<>False));

のようになっているかもしれません。これはAccessが
自分用に変更したので、かまいません。
    • good
    • 0
この回答へのお礼

的確で簡潔なご説明を有り難うございました。
Q&Aで尋ねるというのは初めての経験でしたが、完全に解決でき、感銘を受けました。
今後一層の勉強をしようという意欲が湧いてきました。
感謝申し上げます。
これ以外にも、第1番目、第3番目のかたのコメントも有り難うございました。

お礼日時:2010/09/13 22:50

質問からすると


削除方法以前に削除したいレコードの特定もまだできてないようです。

テーブルAを基準とした選択クエリで、テーブルBのF1と一致するデータのみを表示する。これのクエリ作り方はわかりますか。これの結果が今削除しようとしている対象なので削除前の確認用になります。

削除の仕掛けにするにはこの選択クエリを削除クエリとして変更し名前つけて保存します。

あまりわからず状態で、確認なしでいきなり削除するのは間違いを招きやすい。
    • good
    • 1

クエリでできるでしょう。



まずは、両テーブルの当該フィールド値の合致するレコードだけ抽出するクエリを作るところから試してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す