- ベストアンサー
Access 2007で、テーブルからレコードを削除するクエリを作りた
Access 2007で、テーブルからレコードを削除するクエリを作りたい。 具体的には、テーブルAのフィールドF1とテーブルBのフィールドF2があるとします。このとき、テーブルA中の各レコード(仮にXとします)であって、そのF1の値と同じ値をF2に持つレコードがテーブルBに含まれている場合は、(テーブルAから)そのレコードXを削除するという処理をしたいのです。ややこしいと思いますが、これをクエリやマクロで作ることはできるでしょうか? 私はVBAを知らない初心者です。上の処理も文章で書くと理解してもらえるかどうか不安ですが、だれか助けて下さい。
- みんなの回答 (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が 自分用に変更したので、かまいません。
その他の回答 (2)
- layy
- ベストアンサー率23% (292/1222)
質問からすると 削除方法以前に削除したいレコードの特定もまだできてないようです。 テーブルAを基準とした選択クエリで、テーブルBのF1と一致するデータのみを表示する。これのクエリ作り方はわかりますか。これの結果が今削除しようとしている対象なので削除前の確認用になります。 削除の仕掛けにするにはこの選択クエリを削除クエリとして変更し名前つけて保存します。 あまりわからず状態で、確認なしでいきなり削除するのは間違いを招きやすい。
クエリでできるでしょう。 まずは、両テーブルの当該フィールド値の合致するレコードだけ抽出するクエリを作るところから試してください。
お礼
的確で簡潔なご説明を有り難うございました。 Q&Aで尋ねるというのは初めての経験でしたが、完全に解決でき、感銘を受けました。 今後一層の勉強をしようという意欲が湧いてきました。 感謝申し上げます。 これ以外にも、第1番目、第3番目のかたのコメントも有り難うございました。