• ベストアンサー

Access2007 削除クエリで複数テーブル削除

Access2007で、削除クエリを作成しようとしています。 この削除クエリでは、AtblとBtblのテーブルから該当のレコードを削除したいのです。 Atbl           Btbl 発注No. フラグ        発注No.  10   1          10                 10                 10  20   0          20 といったように、Atbl.発注No.1つに対して、Btblは複数レコードあります。 これを、Atbl.フラグ=1 の条件の発注No.に該当するA,Btblのレコードを削除したいのです。 よろしくお願いします。  

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

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

No.2、DexMachinaです。 > どうして削除されないのかわかりません。 私の場合、ヘルプを頼りにトライ&エラーでの経験則で覚えてきたので、 この件についての原理・理論的な説明はできないのですが(汗)、 とりあえず対処法について、説明します。 (一対多のリレーションシップが設定された複数テーブルからクエリを作成  した場合、多側の削除は可能ですが、一側は削除不可のようです:  No.1の補足欄で「ちなみに」として触れられている例が該当) > これを踏まえて、上記の手順を確認しながらクエリを作成してみました とのことから、リレーションシップの設定で、「参照整合性」と「連鎖削除」 の設定は済んでいるものと思います。 でしたら、「伝票ヘダー」テーブルだけを元にした削除クエリを作成すれば、 『連鎖削除』の設定により、「伝票明細」の該当レコード(=「伝票ヘダー」 で削除されたのと同じ「発注番号」を持つレコード)も同時に削除されます。 SQL文: Delete 伝票ヘダー.* From 伝票ヘダー Where (伝票ヘダー.出力フラグ = 1);

kuriosprj
質問者

お礼

DexMachinaさん、こんにちわ。 >SQL文: >Delete 伝票ヘダー.* From 伝票ヘダー Where (伝票ヘダー.出力フラグ = 1); だけで両方のtbl削除ができました。 リレーションシップの設定で、「参照整合性」と「連鎖削除」の設定がされていれば、このSQL文で削除されるのですね。 おかげさまですっきりしました。 また、すごく勉強になりました。 丁寧な回答もしていただいて本当にありがとうございました。 また、よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

> Atbl.発注No.1つに対して、Btblは複数レコードあります。 Atblの発注No.は、重複するものはないと考えてよろしいでしょうか。 そうであれば、「リレーションシップ」の設定を使用することで、1つの 削除クエリで対応できます。 そうではない場合は、Atbl用とBtbl用の削除クエリをそれぞれ作成 するしかありません。 以下、前者(=Atblの発注No.は重複なし)での対応法を説明します。 (なお、1~3の操作は、対象フィールドが主キーの場合は不要です:   No.1の補足では「主キーではない」とのことなので、今回は必要) 1)Atblをデザインビューで開き、『発注No.』にカーソルを移動 2)画面下方の領域の『標準』タブ内にある『インデックス』の設定値を  「はい (重複なし)」に設定 3)Atblを保存して閉じる 4)『データベース ツール』リボンを選択し、『表示/非表示』内にある  『リレーションシップ』ボタンをクリック 5)『デザイン』リボンの『リレーションシップ』内にある『テーブルの表示』  ボタンをクリック  (または、リレーションシップ画面(画面右下のグレーの領域)を   右クリックして「テーブルの表示(T)」を選択しても可) 6)『テーブルの表示』ダイアログが開くので、AtblとBtblをそれぞれ追加 7)Atblの発注No.を、Btblの発注No.の位置にドラッグ&ドロップ 8)『リレーションシップ』ダイアログが開くので、ダイアログ下方の  『リレーションシップの種類』が「一対多」になっているのを確認し、  『参照整合性(E)』のチェックをオンにする  ※「1~3」の操作をしていない(もしくは主キーではない)場合は   「多対多」と表示され、参照整合性のチェックはオンにできません。 9)『レコードの連鎖更新(D)』が使用可能になるので、そのチェックも  オンにする 10)『作成(C)』ボタンをクリックして『リレーションシップ』ダイアログを閉じる 11)『リレーションシップ』画面で、Atblの発注NoとBtblの発注Noの間に  結合線が表示され、Atbl側に「1」、Btbl側に「∞」が表示されている  ことを確認し、『リレーションシップ』画面を閉じる ・・・以上です。 これで、Atblのレコードを削除クエリなどで削除すると、削除対象と同じ 発注NoをもつBtblの全てのレコードが削除されるようになります。

kuriosprj
質問者

補足

DexMachinaさん、いつもありがとうございます。 >Atblの発注No.は、重複するものはないと考えてよろしいでしょうか 重複はありません。 前に、Atblの発注No.は主キーかとあったのですが、よく見ると主キーになっていました。 これを踏まえて、上記の手順を確認しながらクエリを作成してみましたが、”指定されたテーブルから削除できません”とエラーになります。 クエリのSQLビューは下記のとおり DELETE 伝票ヘダー.出力フラグ, 伝票明細.*, 伝票ヘダー.* FROM 伝票ヘダー INNER JOIN 伝票明細 ON 伝票ヘダー.発注番号=伝票明細.発注番号 WHERE (((伝票ヘダー.出力フラグ)=1)); どうして削除されないのかわかりません。 ちなみに DELETE 伝票ヘダー.出力フラグ, 伝票明細.* FROM 伝票ヘダー INNER JOIN 伝票明細 ON 伝票ヘダー.発注番号=伝票明細.発注番号 WHERE (((伝票ヘダー.出力フラグ)=1)); とすると、 伝票明細tblは該当レコードが削除されていますが、伝票ヘダーtblは 削除されていません。 期待する結果は、伝票ヘダー&伝票明細tbl療法の該当レコードを削除したいのです。 どこがおかしいのでしょうか。 知恵をお貸しください。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • asfd
  • ベストアンサー率21% (25/117)
回答No.1

Atblの発注Noが主キーとなっている必要があると思いますが、 なっていますか?

kuriosprj
質問者

補足

asfdさん、ありがとうございます。 今は主キーとはなっていないです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Access 2007で、テーブルからレコードを削除するクエリを作りた

    Access 2007で、テーブルからレコードを削除するクエリを作りたい。 具体的には、テーブルAのフィールドF1とテーブルBのフィールドF2があるとします。このとき、テーブルA中の各レコード(仮にXとします)であって、そのF1の値と同じ値をF2に持つレコードがテーブルBに含まれている場合は、(テーブルAから)そのレコードXを削除するという処理をしたいのです。ややこしいと思いますが、これをクエリやマクロで作ることはできるでしょうか? 私はVBAを知らない初心者です。上の処理も文章で書くと理解してもらえるかどうか不安ですが、だれか助けて下さい。

  • アクセスで複数のクエリを使ったデータ抽出

    一つのテーブルがあり、そこから削除したいレコードを複数の条件でそれぞれクエリを作成します。3つクエリができたとして、 元データ-(クエリ1)-(クエリ2)-(クエリ3)=抽出データ としたいのですが、これを一度のアクションで行うことはできるでしょうか?

  • 複数テーブルから必要とするテーブルを捜す

    質問します。 月ごとに同じ構成のテーブルが複数あります。(テーブル名はテーブル1-1、テーブル1-2など・・・10以上)この中から該当する月のテーブルを探し出し、ヒットしたテーブルを元にクエリを実行したいのです。クエリはテーブルの数だけ作成しましたが、すべてのクエリを実行したのでは時間が掛かりすぎます。テーブルの1レコード目だけ読んで該当テーブルを捜す方法ってないでしょうか?該当月はフォームよりユーザに入力させる形式を取りたいと考えています。アクセスVBAでお願いします。 よろしくお願いします。

  • クエリ・テーブルについて教えてください。

    access2003です。 作業番号・部コード・課コード・氏名を作業番号をキーに各テーブルから取り出すテーブル作成クエリを作成しました(名称:作業番号クエリ)。 新しく部コード・課コード・フラグ(1~9)のテーブルがあります。 「作業番号クエリ」のテーブルからフラグが3・4・6・7の部コードのみを取り出すテーブル作成クエリをつくりたいのです。 どのようにすればよいのでしょうか?抽出条件は3or4or6or7だと思うのですが、これ以外わかりません。教えてください。 作業番号 部コード 課コード 氏名 100010 001 2001 森田 100012 003 2004 森本 100018 002 2003 山本 100019 001 2002 山田 部コード 課コード フラグ 001 2001 1 001 2002 4 002 2003 3 003 2004 2 004 2005 4 005 2006 5 005 2007 6 005 2008 7 003 2009 8

  • テーブル作成クエリーでオートナンバー型のレコードを作成したい。

    教えてください。Access2000で困ってます。 テーブル作成クエリーから作成するテーブルAにオートナンバー型のレコードを追加したいのですが、どうしたらいいでしょうか? テーブルAに先にオートナンバー型のレコードを追加しておいても再度クエリーを実行するとなくなってしまいました。 できればクエリーでなんとかしたいのですが無理なんでしょうか? ご存じの方、お願いします! もう、頭がパンクしました!

  • 【Access2000】テーブルを検索条件にした削除クエリ

    テーブル1 ID 名前 1  さとう 2  たかはし 3  こんどう 4  やまだ 5  いしかわ テーブル2 ID 2 4 5 上記、データを使用して、「テーブル2に登録されているIDが同じレコードを、テーブル1から削除するためのクエリ」を作成することは出来ますでしょうか? 結果として以下のようになることが希望です。 テーブル1 ID 名前 1  さとう 3  こんどう 削除クエリを作成して、条件で"ID=2"とすれば"2 たかはし"はもちろん削除されます。 しかし、条件を"like [テーブル2]![ID]"としても何も削除されません。 このような処理は可能でしょうか? 可能であればSQLを記述せずに実現させたいのですが可能でしょうか? (SQLは未熟者でして。。。) よろしくお願い致します。

  • Accessでのテーブル作成や追加クエリなどについての質問です。

    ◆テーブル作成クエリで作成するテーブルにオートナンバー型のフィールドを設けたい。◆ (ナンバーが必ず1から振られることが条件) ※補足※ あらかじめオートナンバー型を含むテーブルを用意し、追加クエリ&削除クエリを使用すればよいという意見もありますが、この場合オートナンバー型のフィールドはカウントをアップし続けてしまう為断念。 ★教えてほしい事★ テーブル作成クエリからオートナンバー型のフィールドを作成できるのか? もしくは あらかじめオートナンバー型を含むテーブルを用意し削除クエリでテーブルのデータを空にしてから追加クエリでデータを入力しても必ずオートナンバー型のフィールドの先頭値は"1"から始まるようにできるか? 宜しくお願い致します。

  • アクセス削除クエリ「複雑すぎてできません」のエラー

    テーブルA(フィールド40個)があります。 削除クエリで、From *Aテーブル(すべて) フィールド30個 について Where  0 (数字ゼロ) の条件を入れます。 これを実行すると「クエリが複雑すぎてできません」が でてきます。 フィールド30個についてすべて0のレコードを削除したいのです。 どういう条件を入れればいいでしょうか?

  • ACCESSの削除クエリについて

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

  • アクセスのクエリでレコード削除ができません。

    アクセス超初心者です。 テーブルを商品コードでくっつけて、クエリのデザインビューで表示しました。 いらないレコードを削除しようとしたところ、できません。 くっつける前の、テーブルではできますが、クエリで実行させ、レコードを削除しようとしたところできません。 どうしたらよいのか教えてください。 あと、もうひとつ、クエリで、出力したいフィールド名をドラッグしたあと、削除したいときには、どうすればよいでしょうか? 表示しないなら、できるのですが・・・。削除がわかりません。 よろしくお願いいたします。

このQ&Aのポイント
  • HL-L2370DNを使用していますが、純正のトナーを交換してもトナーコウカンの表示が消えません。
  • 印刷はできますが、プリンターセッティングの2枚目に表示されるトナーカートリッジの残量は0%です。
  • ドラムユニットの残量は70%程度ですが、トナーコウカンの表示が気になります。
回答を見る