ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3579989 DELETEでテーブル削除方法
質問者:NeilMania テーブルA、テーブルB、テーブルCがあります。

テーブルA テーブルB テーブルC
---------------------------------
個人ID  個人ID  なし
---------------------------------

テーブルAに等しい個人IDをテーブルBから
削除をし、テーブルCにテーブルAのIDが存在すれば
テーブルCを削除し、存在しなければテーブルA、テーブルB
の個人IDを削除しようと考えています。

SQLでテーブルAとBを比較して削除をし
テーブルAとテーブルCを削除すれば出来ると思うのですが
他にいい方法があればご教授お願い致します。
困り度:
  • 困っています
質問投稿日時:
07/12/08 00:45
最新から表示回答順に表示

回答

ANo.3 ごめんなさい。
言われていることとやりたいことが、私の頭の中でかみ合わなくなってきたような気がしてます。
回答2の補足はテーブルCのDelete条件ですよね。
テーブルCはテーブルAのIDと同じレコードが削除になりますね。
それはいいです。
存在しなければ削除しようがないですね。それもいいです。
でも、テーブルAはそのID(テーブルCに存在しないID)のレコードを削除するのですよね。
そこをどうしようとしているのかがわからなくて、回答2の質問になりました。

>削除されない(テーブル)に対してSQLを実行するのはプログラム上良くないですかね…
削除される対象が絶対に存在しない状態のテーブルに対してDelete条件のSQLを発行することを指しているのなら、良くないとは言いませんが「処理時間の無駄」ですよね。
回答者:assault852
種類:補足要求
どんな人:専門家
自信:参考意見
回答日時:
07/12/10 22:40
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.2 すみません。一旦リセットさせてください。

テーブルB、テーブルCはテーブルAと同じIDという条件でDeleteできますが、テーブルAに対して、テーブルCに存在しなかったIDというのは、どうやって判定するつもりですか。
回答者:assault852
種類:補足要求
どんな人:専門家
自信:参考意見
回答日時:
07/12/09 14:26
この回答への補足DELETE * FROM TABLEC WHERE ID IN(SELECT * FROM TABLEA WHERE TABLEA.ID = 5)
の間違いです。 
この回答へのお礼メッセージありがとうございます。

SELECT * FROM TABLEC IN (SELECT * FROM TABLEA WHERE ID = 5)
としてテーブルCにIDが存在しなければ削除されないので
問題ないと思っていたのですが…
削除されないに対してSQLを実行するのは
プログラム上良くないですかね…

回答

ANo.1 テーブルCに存在しなければ、AもBも削除するのですから、先にテーブルAとCの比較をした方がよくないですか。

テーブルAとCを比較
→ Cに存在する → Cから削除
→ Cに存在しない → AとBから削除
次にテーブルAとBを比較
→ Bに存在する → Bから削除
回答者:assault852
種類:回答
どんな人:専門家
自信:参考意見
回答日時:
07/12/08 10:32
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼ご連絡遅くなりました。SQL初心者のため
ずっと考えておりました。

'テーブルAとCを比較
'Cに存在する場合Cから削除

DELETE FROM TABLEC
where ID IN (SELECT * FROM TABLEA where TABLE.ID = 5)

'テーブルA,Bを比較
'Bに存在するBから削除

DELETE FROM TABLEB
where ID IN (SELECT * FROM TABLEA where TABLE.ID = 5)

' テーブルA削除(アドバイスどおりではないと思います)

DELETE FROM TABLEA
WHERE TABLEA.ID = 5

アドバイスを頂いた通りは、出来ませんでした…
ここまでSQLを複雑に書かないと出来ないのでしょうか…
もしよろしければもう少しアドバイス頂けるとありがたいです。
よろしくお願いいたします。
 
最新から表示回答順に表示