- ベストアンサー
SQL 条件付きDELETE文について
- 質問者は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を使用していると述べています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
相関サブクエリを使うと(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 では動作未確認です)
その他の回答 (2)
- root139
- ベストアンサー率60% (488/809)
#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) の条件 ); ----------------------------------------
- keeeeeeeen
- ベストアンサー率0% (0/1)
MySQLしか知らないので間違ってたらごめんなさい。 joinするのは一つでwhere区でしばる感じじゃないでしょうか? AテーブルとBテーブルで必ず同じ値が入ってるカラムがあると思うんですがそのカラムでjoinして、where区で条件を設定すればできます。MySQLの場合ですが。
お礼
コメントありがとうございます 具体的にどのように書くのでしょうか…すみませんがよろしくお願いします
お礼
削除したいデータはAテーブルにあります。 わかりやすく書いて頂きありがとうございます