• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL 条件付きDELETE文について)

SQL 条件付きDELETE文について

このQ&Aのポイント
  • 質問者はSQLを使ってAテーブルからBテーブルの特定の条件に当てはまるデータを削除したいと考えていますが、エラーが発生しているようです。
  • 具体的には、BテーブルのDAT_FLGが1であり、AテーブルのKNR_NOとBテーブルのKNR_NOが同じであり、AテーブルのSTR_YMDとBテーブルのSTR_YMDが同じであり、AテーブルのEND_YMDとBテーブルのEND_YMDが同じデータを削除したいと思っています。
  • 質問者は上記の条件に基づいてDELETE文を作成しましたが、エラーが発生しています。質問者はOracleを使用していると述べています。

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

相関サブクエリを使うと(2)(3)(4)の条件が素直に表現できます。 KNR_NO, STR_YMD, END_YMD が同一の行が A に存在するという条件と B.DAT_FLG が1という条件を WHERE 句に書いてやれば良いかと。 例) ------------------------------------ DELETE FROM B WHERE B.DAT_FLG = '1' AND -- (1) の条件 EXISTS ( SELECT * FROM A WHERE A.KNR_NO = B.KNR_NO AND -- (2) の条件 A.STR_YMD = B.STR_YMD AND -- (3) の条件 A.END_YMD = B.END_YMD -- (4) の条件 ); ---------------------------------------- (手元に無いので Oracle では動作未確認です)

参考URL:
http://www.techscore.com/tech/sql/SQL7/07_01.html/#sql75

その他の回答 (2)

  • root139
  • ベストアンサー率60% (488/809)
回答No.3

#2 です。 削除したいのはAテーブル上のデータでしょうか? そうだとすると#2の例とテーブル名が逆になります。 例) テーブル A の行を削除したい場合 ---- DELETE FROM A WHERE EXISTS ( SELECT * FROM B WHERE B.DAT_FLG = '1' AND -- (1) の条件 A.KNR_NO = B.KNR_NO AND -- (2) の条件 A.STR_YMD = B.STR_YMD AND -- (3) の条件 A.END_YMD = B.END_YMD -- (4) の条件 ); ----------------------------------------

optimas
質問者

お礼

削除したいデータはAテーブルにあります。 わかりやすく書いて頂きありがとうございます

回答No.1

MySQLしか知らないので間違ってたらごめんなさい。 joinするのは一つでwhere区でしばる感じじゃないでしょうか? AテーブルとBテーブルで必ず同じ値が入ってるカラムがあると思うんですがそのカラムでjoinして、where区で条件を設定すればできます。MySQLの場合ですが。

optimas
質問者

お礼

コメントありがとうございます 具体的にどのように書くのでしょうか…すみませんがよろしくお願いします

関連するQ&A