• ベストアンサー

削除クエリー

アクセス2000です。 商品マスターテーブルから削除クエリーを使用してレコードの削除をしたいのです。 削除用のテーブルと商品コードが同じレコードを削除したいのですが、どのようにすればよいでしょうか。 教えてください。よろしくお願いいたします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1です。 > Select文では削除できないと思いますが? 失礼しました。転写ミスです。 DELETE 商品マスタ.* FROM 商品マスタ INNER JOIN 削除用 ON 商品マスタ.商品コード = 削除用.商品コード; > デザインビューで2テーブルを表示させると削除できないです。 「削除用」テーブルの「商品コード」に主キー(または重複不可インデックス)を設定していないため、ではないでしょうか? これを設定すれば、削除可能になると思います。 (Access97で動作確認済) 何にしても、解決おめでとうございます。

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

「商品マスタ」テーブル:   商品コード(主キー)、商品名、他 「削除用」テーブル:   商品コード(主キー) というテーブル構造だとすると、 SELECT 商品マスタ.* FROM 商品マスタ INNER JOIN 削除用 ON 商品マスタ.商品コード = 削除用.商品コード; というSQLで、「削除用」テーブルの商品コードと一致する商品が、商品マスタから削除されます。 (デザインビューでクエリを作成する場合は、新規クエリに上記2テーブルを追加した上で、一方のテーブルの「商品コード」をもう一方の「商品コード」にドラッグしてリンク(自動で張られた場合はそのままでOK)した後、「商品マスタ」の「*」だけを、画面下側のフィールド表示領域(正式名称忘れました(汗))にドラッグして、削除クエリとして保存します) なお、上記の設定で「商品マスタ」と「削除用」の双方を同時にレコード削除したい場合は、 1)メニューで「ツール(T)」→「リレーションシップ(R)」をクリック 2)リレーションシップ画面で「商品マスタ」と「削除用」に「商品コード」でリレーションシップを設定 3)そのリレーションシップの「参照整合性」のチェックをOnにし、さらに「レコードの連鎖削除」をOnにする とすればOKです。

hideto_urata
質問者

補足

Select文では削除できないと思いますが? またdeleteだったとしても、デザインビューで2テーブルを表示させると削除できないです。 自己レスですが、以下でできました。 ありがとうございました。 delete * from 商品マスタ where exists ( Select * from 削除用 where [商品マスタ].[商品コード]=[削除用].[商品コード]);

関連するQ&A