2024年のうちにやっておきたいこと、ここで宣言しませんか?

オラクル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;


よろしくお願いします

A 回答 (5件)

delete 文の細かい構文はちょっと覚えてませんが


サブクエリ使えばいいんじゃないですか

delete from table_a
where 主キーカラム = (
select table_a.主キーカラム
from table_a, table_b
where
指定の条件
)
    • good
    • 8

提示されている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)
;
    • good
    • 3
この回答へのお礼

みなさん、ありがとうございます。まとめてですいません。

過去のQAを検索したところ以下のものがみつかり、
結局これを利用しました。

>BTABLEのCODEが1のレコードにKEYで関連付く
>ATABLEのレコードを削除

>DELETE FROM ATABLE WHERE
>( KEY1, KEY2 ) IN (
> SELECT KEY1, KEY2
> FROM BTABLE
> WHERE CODE=1
>)

まだSQLをはじめたばかりで、
みなさんからの回答もすぐには理解できないレベル
なのですが、また参考にさせてもらいます。
ありがとうございました。

お礼日時:2005/10/19 22:20

いくつ主キーがあるのか分かりませんが・・・。



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
        );

こんなんでどうでしょ。
見た目上、全角スペースを使っているのでコピペは厳禁。
    • good
    • 1

delete文のどの辺りでエラーが出るのか教えてほしいかも。



テーブルAとテーブルBをカンマでつなげて書くとか?
つまり、
delete FROM tableA,tableB where ・・・・
とか、そんな感じではだめですかね?
    • good
    • 0

>テーブルB.CCC > 0


>テーブルA.CCC > 0
どちらが本当の条件ですか?

あとエラーメッセージを示してください。
    • good
    • 0

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

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

関連するカテゴリからQ&Aを探す


おすすめ情報

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