• ベストアンサー

2つのテーブルに共通するレコードを削除したい

2つのテーブルがあり、両方にID番号フィールドが存在しています。 Aテーブルは元のデータ Bテーブルは削除したいレコードのID番号 という構成になっているとき、 AテーブルとBテーブルの共通するレコードを削除するにはどうすればよいでしょうか。 ものすごく単純な質問で申し訳ないのですが...宜しくお願いします

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

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

1、テーブル内容  Aテーブル フィールド:ID番号、・・  Bテーブル フィールド:削除番号、・・ 2、まず、選択クエリで削除したいIDのサブクエリを作る。   ・AテーブルとBテーブルのIDを結合。   ・表示のSQLでサブクエリをゲット    内容は      SELECT Aテーブル.ID番号      FROM Aテーブル INNER JOIN Bテーブル ON Aテーブル.ID番号 = Bテーブル.削除ID;    3、次に削除クエリを作成   ・新規クエリで削除クエリを作成   ・Aテーブルのみ選択   ・ID番号を下にドラッグ   ・その抽出条件に2で作成したサブクエリを「;」を外して    IN (  )をつけて入力    内容は      IN (SELECT Aテーブル.ID番号      FROM Aテーブル INNER JOIN Bテーブル      ON Aテーブル.ID番号 = Bテーブル.削除ID)  これで、クエリを実行することにより、Aテーブルの内容が、  Bテーブルの削除番号と同じID番号のレコードを削除できます。

homelanadmin
質問者

お礼

業務繁忙で回答が遅れました。大変失礼いたしました。 教えていただいた方法で完全に動きました。 サブクエリというのはまだつかったことがなかったので、 再勉強させていただきます。 ありがとうございました。

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

その他の回答 (5)

  • BIBImk2
  • ベストアンサー率0% (0/1)
回答No.6

もう見ていないかもしれませんが、Bテーブルに主キーを設定すると うまくいくかもしれません。

参考URL:
http://www.nurs.or.jp/~ppoy/access/access/acQ010.html
homelanadmin
質問者

補足

お礼をつけるのが大変遅くなってしまい、皆さんには大変失礼いたしました。 当時よりは随分スキルも上がり、指導する立場になりましたが、いただいたアドバイスもあってのことと感謝しております。

すると、全ての回答が全文表示されます。
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>「指定されたテーブルから削除できませんでした」 作った削除クエリをSQLビューで開き内容をコピーしてくれれば何が違うのか分かるのですが。

homelanadmin
質問者

お礼

業務繁忙にて、ご回答大変遅くなり申し訳ありませんでした。 教えていただいたSQLと全く同じことを書いていますので 問題ないと思っているのですが、まだ出来ていません。 なんとなく、メモリ不足が起因のような気がするのですが、切り分け出来ておりません。 No.5さんの手法で希望の作業は完了できることがわかったのでご報告しておきます。 ありがとうございました。 (時間が空いたらサンプルデータで実験してみるつもりです)

すると、全ての回答が全文表示されます。
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>削除クエリは機能しないのです これはクエリのフィールドの設定に問題があるだけです。 INNER JOINでA・Bテーブルが結合されているためで 個別のフィールドをクエリ上に設定しないで テーブル名.*のように*で全てを指定すれば削除クエリとして使えます。 SQLでいえば DELETE [Bテーブル].ID, [Bテーブル].名前, FROM Bテーブル INNER JOIN Aテーブル ON [Bテーブル].ID = [Aテーブル].ID; の状態になっているのを DELETE [Bテーブル].* FROM Bテーブル INNER JOIN Aテーブル ON [Bテーブル].ID = [Aテーブル].ID; にすれば削除クエリとして使えます。

homelanadmin
質問者

補足

たびたびありがとうございます。 ・・・が、何故かうまくいかず。 エラーメッセージが変わり、 「指定されたテーブルから削除できませんでした」 となったので進歩したようには感じます。 スキルアップのため、試行錯誤を続けていますが。。。

すると、全ての回答が全文表示されます。
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

Bテーブルのクエリを作りAテーブルを追加しID同士をドラッグし結合すればA・Bテーブルに共通するIDのレコードを抽出できます。 クエリの新規作成でウィザードが開いたら選択クエリを選びBテーブルを選択しクエリを作ります。 そのクエリをデザインビューで開きテーブルの表示でAテーブルを追加しクエリ上に表示させID同士をドラッグすれば出来ます。簡単です。 そのクエリを開けばA・Bテーブルに共通するIDのBテーブルのレコードが表示されるのでそのレコードを削除すれば出来ます。 レコード件数が多い場合は作ったクエリを削除クエリにするばクエリを開けば削除されます。

homelanadmin
質問者

お礼

選択クエリで表示された結果のレコードを選択して削除すると、 元のテーブルのレコードを削除できるんですね。 なんだかものすごく基本的なことを知りませんでした。 とりあえずこの方法で結果は出せました。 ありがとうございます。 ただ、削除クエリは機能しないのです (No.1の補足のエラーメッセージとなります) これが解決できないのが気持ち悪いですね。

すると、全ての回答が全文表示されます。
  • ramoke
  • ベストアンサー率26% (206/767)
回答No.1

アクセスなら削除クエリで合致するレコードを処理すればよいのでは?

homelanadmin
質問者

補足

あせって、MS-ACCESS2003を使っていることを明記していませんでした。 すみません。 削除クエリで、抽出条件に[テーブルB]![ID番号]などと入力してみたのですが 「削除するレコードを含んだテーブルを指定してください」 とのエラーメッセージとなります。 なんだかとっても基本的なことを怠っている気がするのですが、 どうしても思いつきません。

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

関連するQ&A