一回も披露したことのない豆知識

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

ものすごく単純な質問で申し訳ないのですが...宜しくお願いします

A 回答 (6件)

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番号のレコードを削除できます。
    • good
    • 7
この回答へのお礼

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

ありがとうございました。

お礼日時:2006/05/16 15:15

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


うまくいくかもしれません。

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acQ010 …

この回答への補足

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

補足日時:2013/02/14 00:53
    • good
    • 0

>「指定されたテーブルから削除できませんでした」


作った削除クエリをSQLビューで開き内容をコピーしてくれれば何が違うのか分かるのですが。
    • good
    • 2
この回答へのお礼

業務繁忙にて、ご回答大変遅くなり申し訳ありませんでした。

教えていただいたSQLと全く同じことを書いていますので
問題ないと思っているのですが、まだ出来ていません。
なんとなく、メモリ不足が起因のような気がするのですが、切り分け出来ておりません。

No.5さんの手法で希望の作業は完了できることがわかったのでご報告しておきます。
ありがとうございました。
(時間が空いたらサンプルデータで実験してみるつもりです)

お礼日時:2006/05/16 15:18

>削除クエリは機能しないのです


これはクエリのフィールドの設定に問題があるだけです。
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;
にすれば削除クエリとして使えます。

この回答への補足

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

スキルアップのため、試行錯誤を続けていますが。。。

補足日時:2006/05/08 17:30
    • good
    • 3

Bテーブルのクエリを作りAテーブルを追加しID同士をドラッグし結合すればA・Bテーブルに共通するIDのレコードを抽出できます。


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

選択クエリで表示された結果のレコードを選択して削除すると、
元のテーブルのレコードを削除できるんですね。
なんだかものすごく基本的なことを知りませんでした。
とりあえずこの方法で結果は出せました。
ありがとうございます。

ただ、削除クエリは機能しないのです
(No.1の補足のエラーメッセージとなります)
これが解決できないのが気持ち悪いですね。

お礼日時:2006/05/08 11:25

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

この回答への補足

あせって、MS-ACCESS2003を使っていることを明記していませんでした。
すみません。

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

補足日時:2006/05/08 10:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A