- ベストアンサー
ACCESSの削除クエリについて
ACCESSの初心者のものです。 選択クエリで2つのテーブルから一致した項目を抽出したものをだしました。 そのレコードを(2つのテーブル)のデータを削除したいのですがどうすればいいでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ひとつの削除クエリで複数のテーブルから削除することは できません。 どのような関係のテーブルなのでしょうか? 親子関係であれば、リレーションシップで連鎖削除などの設定を しておけば、お望みのことに近いことが可能かもしれません。
その他の回答 (3)
- KAERU_VXV
- ベストアンサー率60% (18/30)
(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)
「選択クエリで2つのテーブルから一致した項目を抽出したものをだしました。」 →これの結果をテーブル作成クエリーでワークテーブルに保存して置きます。 続いて、削除クエリーでテーブルAからワークテーブルに一致するデータを削除する。 同様に、削除クエリーでテーブルBからワークテーブルに一致するデータを削除する。
スーツのデザイナで、そもそも<削除クエリ>など使ったことがありませんが... 多分、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
補足
KAERU_VXVさん。ご回答遅くなりまして申し訳ございません。 「続いて、削除クエリーでテーブルAからワークテーブルに一致するデータを削除する。」 の点ですが、クエリでどのように設定をすればよろしいのでしょうか? 一致してるのは、電話番号どうしが一致しているものなのですが...