• ベストアンサー

SQL、2つのテーブルで条件一致したものだけdeleteする方法は?

オラクルSQLで質問です やりたいことは、 テーブルAから以下の条件に該当するデータを削除する。 基本的にはテーブルBの内容と比較して、一致したもの。 条件(全ての条件を満たすこと)  テーブルA.AAA = テーブルB.AAA  テーブルA.BBB = テーブルB.BBB  テーブルB.CCC > 0 調べたところ、SQLサーバでは以下のように from を2つ書いて実現できるようです。 が、今回はオラクルなので文法エラーになります。 delete FROM テーブルA FROM テーブルB where テーブルA.AAA = テーブルB.AAA AND テーブルA.BBB = テーブルB.BBB AND テーブルA.CCC > 0 ; commit; よろしくお願いします

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

  • ベストアンサー
  • THX1138
  • ベストアンサー率51% (108/208)
回答No.3

delete 文の細かい構文はちょっと覚えてませんが サブクエリ使えばいいんじゃないですか delete from table_a where 主キーカラム = ( select table_a.主キーカラム from table_a, table_b where 指定の条件 )

その他の回答 (4)

回答No.5

提示されているSQLサーバのSQLと同等の動作をするSQLは次のような感じです。 delete テーブルA a where a.CCC>0 and exists(select 1 from テーブルB b where a.AAA=b.AAA and a.BBB=b.BBB) ; または delete テーブルA a where a.CCC>0 and (a.AAA,a.BBB) in (select b.AAA,b.BBB from テーブルB b) ;

orabegi
質問者

お礼

みなさん、ありがとうございます。まとめてですいません。 過去のQAを検索したところ以下のものがみつかり、 結局これを利用しました。 >BTABLEのCODEが1のレコードにKEYで関連付く >ATABLEのレコードを削除 >DELETE FROM ATABLE WHERE >( KEY1, KEY2 ) IN ( > SELECT KEY1, KEY2 > FROM BTABLE > WHERE CODE=1 >) まだSQLをはじめたばかりで、 みなさんからの回答もすぐには理解できないレベル なのですが、また参考にさせてもらいます。 ありがとうございました。

回答No.4

いくつ主キーがあるのか分かりませんが・・・。 DELETE FROM A WHERE A.AAA = (          SELECT B.AAA          FROM B          WHERE A.AAA = B.AAA AND              A.BBB = B.BBB AND              B.CCC > 0         ); こんなんでどうでしょ。 見た目上、全角スペースを使っているのでコピペは厳禁。

  • ma-chan45
  • ベストアンサー率31% (46/145)
回答No.2

delete文のどの辺りでエラーが出るのか教えてほしいかも。 テーブルAとテーブルBをカンマでつなげて書くとか? つまり、 delete FROM tableA,tableB where ・・・・ とか、そんな感じではだめですかね?

  • tsuna555
  • ベストアンサー率53% (22/41)
回答No.1

>テーブルB.CCC > 0 >テーブルA.CCC > 0 どちらが本当の条件ですか? あとエラーメッセージを示してください。

関連するQ&A