• ベストアンサー

ACCESSの削除クエリについて

ACCESSの初心者のものです。 選択クエリで2つのテーブルから一致した項目を抽出したものをだしました。 そのレコードを(2つのテーブル)のデータを削除したいのですがどうすればいいでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.1

ひとつの削除クエリで複数のテーブルから削除することは できません。 どのような関係のテーブルなのでしょうか? 親子関係であれば、リレーションシップで連鎖削除などの設定を しておけば、お望みのことに近いことが可能かもしれません。

その他の回答 (3)

  • KAERU_VXV
  • ベストアンサー率60% (18/30)
回答No.4

(1)テーブルAとテーブルBで一致するものをワークテーブルWKに抽出する。(テーブル作成クエリー)  テーブルA    テーブルB      WK  電話番号     電話番号      電話番号   1111   2222  一致  2222   抽出   2222   3333  --  3333   -→   3333             4444 (2)テーブルAとWKで一致するものをテーブルAから削除する。(削除クエリー)   WK      テーブルA     テーブルA  電話番号     電話番号      電話番号               1111        1111   2222  一致   2222   削除   3333  --   3333   -→ (3)テーブルBとWKで一致するものをテーブルBから削除する。(削除クエリー)   WK      テーブルB     テーブルB  電話番号     電話番号      電話番号   2222  一致  2222   削除   3333  --  3333   -→             4444         4444 ※削除クエリー自体はご存知なのですよね?

  • KAERU_VXV
  • ベストアンサー率60% (18/30)
回答No.3

「選択クエリで2つのテーブルから一致した項目を抽出したものをだしました。」 →これの結果をテーブル作成クエリーでワークテーブルに保存して置きます。 続いて、削除クエリーでテーブルAからワークテーブルに一致するデータを削除する。 同様に、削除クエリーでテーブルBからワークテーブルに一致するデータを削除する。

PAXSON
質問者

補足

KAERU_VXVさん。ご回答遅くなりまして申し訳ございません。 「続いて、削除クエリーでテーブルAからワークテーブルに一致するデータを削除する。」 の点ですが、クエリでどのように設定をすればよろしいのでしょうか? 一致してるのは、電話番号どうしが一致しているものなのですが...

noname#22222
noname#22222
回答No.2

スーツのデザイナで、そもそも<削除クエリ>など使ったことがありませんが... 多分、DELETE文を生成しているに過ぎないと解釈して・・・ No1の方の回答をちくっとテストしてみました。 そうして、ほぼ、同じような結論(?)に達しました。 ***** Access95の頃は、次のような削除クエリーを使っていました。 Dim dbsCurrent As Database Dim qdfDelete  As QueryDed Set dbsCurrent = CurrentDb Set qdfDelete = dbsCurrent.CreateQueryDef() qdfDelete.Name = "削除クエリー" qdfDelete.SQL = "DELETE FROM ・・・" dbsCurrent.QueryDefs.Append qdfDelete qdfDelete.Execute dusCurrent.QueryDefs.Delete "削除クエリー" なお、現在は、このようにシコシコとコードを書く必要はないと思います。 ---------------------------------------------------------------- QDFExecute "DELETE FROM ・・・" ---------------------------------------------------------------- と、QDFExecute関数を用意すれば、僅か1行で事足りると思います。 ---------------------------------------------------------------- QDFExecute "DELETE FROM 選択クエリ名" はエラーに! ---------------------------------------------------------------- さて、Table1とTable2という2つのテーブルからデータを抽出する選択クエリーを指定すると、 「指定されたテーブルから削除出来ませんでした。(QDFExecute)」 というエラーメッセージが表示され No.1の方の指摘の正しさが確認されました。 ---------------------------------------------------------------- QDFExecute "DELETE FROM Table1 WHERE ID=1" ---------------------------------------------------------------- とやって連鎖削除を利用するのが一番手っ取り早いようです。 Public Sub QDFExecute(ByVal SQLText As String) On Error GoTo Err_QDFExecute   Dim dbs As DAO.Database   Set dbs = CurrentDb   dbs.Execute SQLText Exit_QDFExecute:   Exit Sub Err_QDFExecute:   ErrMsg Err.Description & "(QDFExecute)"   Resume Exit_QDFExecute End Sub

関連するQ&A