【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

Oracle8.1.7を使用しております。
以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか?

表名:A
  B | C
――――――――
  2 | 10
  2 | 1
  1 | 10
  1 | 1
  1 | 11
  1 | 2
  1 | 1
  3 | 10
  2 | 3

変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。)
ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。
  B | C     B | C
――――――――― ―――――――――
  1 | 10    2 | 10
  1 | 1     2 | 1
  1 | 11    2 | 3
  1 | 2
  1 | 1
ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか?

最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。

A 回答 (3件)

>1行目と2行目を削除するSQL文を書きたいのですが...


(略)
>Bが2の行を削除したいのですが....

最初は二行削除すると書いてあって、その後の説明は一行削除するようになっているのですが.....。

私の勘違いだったらすみません。

この回答への補足

えーと、なかなか文字で書くのは難しいのですが、

右と左のの表で、Cが一致する行が2行あるので、2行削除するということになるのですが・・・。

つまり、左の表でB=1、C=10の行と右の表でB=2、C=10の行がCが一致します。ここで、元表のB=2、C=10の行を消す。さらに2表をチェックすると左の表でB=1、C=1の行と右の表のB=2、C=1の行がCが一致します。ここでさらに元表からB=2、C=1の行を消します。
都合これで2行になると思います。

補足日時:2001/11/09 17:36
    • good
    • 0

SELECT B,C FROM A WHERE B=2 AND C=(SELECT C FROM A WHERE B=1);



DELETE FROM A WHERE B=2 AND C=(SELECT C FROM A WHERE B=1);

SELECT文を実行して納得できたら
DELETE文を使ってください。

ダメなら補足して下さい。
    • good
    • 0

ゴメンナサイ。


C=(SELECT C FROM A WHERE B=1)

C IN (SELECT C FROM A WHERE B=1)
の方がいいかも?
    • good
    • 0
この回答へのお礼

ありがとうございます。

答えがわかれば、何てことないSQL文ですね。でもそれに気づくかどうかが、経験の差かなって思っています。

内容もわかりやすく、もれなく、削除できそうなので、このSQL文使わせていただきます。(ちなみに、やはり、INでないとエラーがでました。)

お礼日時:2001/11/12 17:04

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

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