• ベストアンサー

削除クエリー”更新可能なクエリーでなければなりせん”のエラー

アクセス97(W2000) 削除クエリーを実行すると、上記のようなエラーメッセージが出てきます。 行ったのは、下記のような内容です。 テーブルA:品種・商品コード テーブルB:購入月・商品コード・単価 この2つのデーブルを、商品コードで結合します。 そして、選択クエリーで、 ”購入月・品種・商品コード・単価” を表示させます。 その後、品種で”R”を設定し、抽出します。 ここまでは、抽出も出来、後は、テーブルBから”品種R”だけ、 つまり、選択した内容を削除したく、選択クエリーを削除クエリーに変更し、 実行したところ、上記のエラーが発生いたしました。 削除するテーブルを指定する、サブクエリーを使用する、 など、このままではいけない、というのはわかったのですが、 具体的な方法が、よくわかりません。 今の自分の実力では、かなりの勉強不足、と思いますが、 なにがしかのアドバイスを頂ければと、思っております。 お手数ですが、どなたか、よろしくお願い申し上げます。

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

  • ベストアンサー
回答No.2

テーブルの構造からして、テーブルAには同じ商品コードを持つレコードは1件のみで テーブルBは同じ商品コードをもつレコードが複数件存在すると思われます この2つのテーブルを商品コードで結合すると テーブルAとテーブルBのレコードが 1:多 の形で 繋がることになります。  テーブルA        テーブルB 品種 商品コード   購入月 商品コード 単価 R   ABC       10    ABC    100               11    ABC    150          ↓ 購入月 品種 商品コード 単価 10    R    ABC    100 11    R    ABC    150 ※テーブルBの複数件のレコードに対して、テーブルAは  同じ1件のレコードの内容が同時に使われている こうした 1:多 の形のクエリは「更新不可能なクエリ」になります。 (上記の例で、11月のレコードだけ消そうとしても テーブルAのデータは10月のレコードの方にも使われているため消す事はできない といった不整合が発生するため、更新不可とみなされる) サブクエリを使った形にするためには テーブルの結合は行わず、テーブルBのみを指定した削除クエリとし 商品コードの抽出条件の部分に IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R") という式を埋め込んでみてください。 これならば 「テーブルAから 品種 = R の商品コードを抽出し  テーブルBの商品コードがそれと一致するレコードを削除する」 という意味のクエリになります。 SQLビューで書くならば DELETE FROM テーブルB WHERE 商品コード IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R") という形になります。

yukiko5
質問者

お礼

前半部分は、自分が質問する際、説明しなければいけない部分でございますね・・。 大変、失礼致しました。ご推察どおりでございます。 出来ました。本当にありがとうございます。 参考書なり、webなり調べましたが、いまいちわからずにおりました。 ご回答者様の説明、特に”~という意味のクエリになります”の個所が、 ”そういうことなんだ!”と、とてもわかりやすかったです。 本当にありがとうございました。勉強になりました。

その他の回答 (1)

noname#21585
noname#21585
回答No.1

クエリには、更新可能なクエリと更新不可能なクエリがあります。 「更新可能、不可能」とはどういう意味かと申しますと、クエリをデータシートビューで開いたときに、その内容を、あたかもテーブルに対して行うかのように編集することができるかどうかということです。例えば、あるレコードのあるフィールドの値を訂正したいときには、テーブルを開いて、そこで値「教えgoo」を「教えてgoo」に直したりしますね。クエリでは、この行為を行えるクエリと行えないクエリがあるわけです。で、更新不可能なクエリではアクションクエリ(更新クエリ、削除クエリ)を実行することは、できないことになっているわけです。 質問者様の場合ですと、作成なさったクエリは更新不可能なクエリかと思われます。ですから「更新不可能なクエリで削除クエリを実行することはできませんよ。」というメッセージが、出ているわけですね。 ですので、削除クエリを実行させたい場合は、そのクエリ更新可能なクエリに作り変えてから実行する、という順序を取ることになります。 どのように作ったらよいのか、と来られますと、ご記述の内容だけでは回答できません。少々がんばってみてください。 それから、更新可能なクエリと更新不可能なクエリの違いですが、私もしっかり説明できませんが、私は「二つ以上のテーブルを結合させてできたクエリ」というのがそれかな、と思ってます。ただ単にひとつのテーブルの並び替えだけを行わせるクエリなどでは、更新はできます。

yukiko5
質問者

お礼

質問の説明不足、本当に申し訳ありません。 ご回答、参考にさせて頂きます。ありがとうございました。

関連するQ&A

専門家に質問してみよう