SQLでテーブルの特定の行を削除する方法を教えてください

このQ&Aのポイント
  • Oracle8.1.7を使用している状況で、特定のテーブルの1行目と2行目を削除するSQL文の書き方がわかりません。誰かアドバイスをお願いします。
  • 変数P1=1とP2=2があり、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、結果には共通のCの値があります。Bが2の行を削除するためのSQL文の書き方を教えてください。
  • 最近SQLに慣れてきたつもりでいたが、このような問題で詰まってしまいました。助けていただけると助かります。
回答を見る
  • ベストアンサー

こんなSQL文

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には慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。

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

  • ベストアンサー
  • xinman
  • ベストアンサー率30% (25/83)
回答No.3

ゴメンナサイ。 C=(SELECT C FROM A WHERE B=1) は C IN (SELECT C FROM A WHERE B=1) の方がいいかも?

msystem
質問者

お礼

ありがとうございます。 答えがわかれば、何てことないSQL文ですね。でもそれに気づくかどうかが、経験の差かなって思っています。 内容もわかりやすく、もれなく、削除できそうなので、このSQL文使わせていただきます。(ちなみに、やはり、INでないとエラーがでました。)

その他の回答 (2)

  • xinman
  • ベストアンサー率30% (25/83)
回答No.2

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文を使ってください。 ダメなら補足して下さい。

  • stork
  • ベストアンサー率34% (97/285)
回答No.1

>1行目と2行目を削除するSQL文を書きたいのですが... (略) >Bが2の行を削除したいのですが.... 最初は二行削除すると書いてあって、その後の説明は一行削除するようになっているのですが.....。 私の勘違いだったらすみません。

msystem
質問者

補足

えーと、なかなか文字で書くのは難しいのですが、 右と左のの表で、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行になると思います。

関連するQ&A

  • 2回実行のSQL文を1回にしたい

    テーブルXXXがありますその中の各フィールドは以下の通りです。 フィールド A フィールド B フィールド C まずA=0の検索をしてBの値を取り出し、新たにB=取り出した値で 検索をしたいのですがSQL文が1つにできないでしょうか? 今現在、 SELECT * FROM XXX WHERE A=0 を実行してBの値を変数Dに入れ SELECT * FROM XXX WHERE B=D と実行して全てのCの値を取り出しています よろしくお願いします。

  • あいまい条件抽出についてのSQL文について

    あいまい条件抽出についてのSQL文について hiroです。 SQL文について、教えてほしいのですが、 下記のようなDatabaseがあったとします。 tableA:カラムA:ABCDE,BCDEA tableB:カラムB:??C?? この場合、例えば、 SELECT * FROM DataBase WHERE tableA.カラムA like tableB.カラムB みたいな感じで、カラムAのABCDEだけを検索するような仕組みを作ることは 可能でしょうか? ※上のSQL文では引っ張れないのは理解できています。 わかる方がいらっしゃいましたら、SQL文を教えてください。 よろしくお願いします。 環境:Oracle 11g

  • SQL文について質問させて頂きます。

    いつもお世話になっております。いろいろSQL文の本を読んだのですがわからないので今回もよろしく お願い致します。 SELECT DISTINCT * FROM bukken WHERE (id IN (SELECT fid FROM fudou_kodawari WHERE kid IN (1,4))) というSQL文があるのですが、これだと1,4が1つでも含まれるリストが出てくるのですが1,4が完全に一致しないと出てこないようにするにはどのようにSQL文を変更すれば良いのでしょうか? 何卒よろしくお願い致します。

  • SQL文で

    SQLのWHEREの条件文の中に、「(+)」というのがあるのですが、 どういう意味なのでしょうか? select * from Office WHERE a.Office_cd=b.Office_cd(+) といった感じですが。 よろしくお願いします。

  • ACCESSのSQLの書き方

    ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)

  • SQL*Plus8.0.6でChangeコマンド

    こんにちは。教えてください。 SQL*Plus8.0.6でChangeコマンドを使うとき、たとえば SQL> select a, b, c from tbleA 2 where a = 'xxx' 3 / このselect文の1行目を select a1, b, c from tbleA と修正したい時、CHANGEコマンドで Change/a/a1 と入力すると、2行目のaが変換されてしまいます。 これを、1行目のaをChangeするよう指定するにはどうしたらよいでしょうか? よろしくお願いいたします。

  • SQLServer2000 SQL文について

    SQLServer2000 SQL文について Where句内で、このような演算指定はできますか? できない場合このようなSQLを実行したい場合 他にどのような方法が考えられますでしょうか? select a.id from a,b where a.yymm = b.yymm-1

  • 1つのSQLにしたいです

    1つのSQLにしたいです 以下のSQLを1つにしたいです。 select a, b, c, '1' event_type from sample where type = '1' select a, b, c, '2' event_type from sample where type = '2' select a, b, c, '3' event_type from sample where type = '3' ポイントはselect分に結果によって'1'、'2'、'3'といれたいです。 初心者的質問で申し訳ありません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文がわかりません。

    SQL文がわからなく困っております。 下記のデータ*01を*02のデータのようにSELECTするためには、 どのようなSQL文を書けばよいのかお教えいただけますでしょうか? DBはoracle11gです。 ※01 ID      所属部署 _____________________________    1     a    1     b     2     a    2     b    2     c    3     a    3     b    3     c    3     d ____________________________ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ※02  ID   所属部署    所属部署2   所属部署3   所属部署4 _________________________________________   1         a         b 2         a         b         c 3         a         b         c         d

  • SQL文に関するとある問題について

    SQL文に関するとある問題について (3) 次の出庫記録の表に対して、以下のSQL文を実行したときに得られる値が 最も大きな数が得られるものは何ですか? 該当する記号を書いてください。 --------------------------------------------------------------- 商品番号 数量 日付 PRT145 4 20090610 DP255 2 20090610 DP266 3 20090611 PRT255 2 20090611 a SELECT MAX(数量) FROM 出庫記録 b SELECT AVG(数量) FROM 出庫記録 WHERE 日付='20090610' c SELECT COUNT(*) FROM 出庫記録 d SELECT SUM(数量) FROM 出庫記録 WHERE 日付='20090611' ------------------------------------------------------------ この場合、それぞれの選択肢が出す数字は a=1 b=3 c=4 d=5 なので、正解はdでいいんでしょうか? aのMAXって、最大なのはPRT145の数量4ですが、a=に4をいれるべきか、それともMAXなのはPRT145一つだけなので1にすべきか、まずそこで躓きました。 bのAVGは4+2=6なので、それの半分の3かな? cはそのまんま4にして dはSUMなんで、3+2=5.にしちゃいましたが、間違ってるでしょうか?   宜しくお願い致します。