こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

こういうDELETE文を作成したいのですが

質問があるのですが、よろしくお願いいたします。

Oracle8iでDELETEの処理を考えています。

[待ち合わせ]テーブル

id_no status
------------------
1000 0
1000 0
2000 1
3000 0
3000 1
4000 0
4000 0
4000 0

以上のようなテーブルがある時に、同一のid_noでstatusがすべて0の時は、レコードを消すという処理を行う。またstatusに1が含まれるid_noは消さないという事を行いたいのですが、DELETE文の条件が解りません。GROUP句を使えばいいのかと思うのですが、うまく行きません。


以下の結果になる事を望んでいます。
id_no status
------------------
2000 1
3000 0
3000 1


[1000] - statusが2レコードとも0なので、消す
[2000] - statusが1なので、そのまま
[3000] - statusが2レコードとも0でないので、そのまま
[4000] - statusが3レコードとも0なので、消す

お解りの方、アドバイスを頂ければ幸いです。

よろしくお願いします。

投稿日時 - 2004-08-03 23:36:33

QNo.950115

すぐに回答ほしいです

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

#1のかたが書かれているように
DELETE FROM {テーブル名}
WHERE id_no NOT IN (
SELECT id_no FROM {テーブル名}
WHERE status = 1 )
で大丈夫です!
テスト済み!!

投稿日時 - 2004-08-04 09:30:28

お礼

テストしてくれたんですね!

こちらでも確認できました。

ありがとうございます。

投稿日時 - 2004-08-04 13:02:55

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

DELETE FROM 待ち合わせ
WHERE id_no NOT IN (SELECT id_no FROM 待ち合わせ WHERE status <> 0 GROUP BY id_no)

ではいかがでしょうか?

投稿日時 - 2004-08-04 11:37:23

お礼

NOTを使うっていう、発想がでてくれば、もうすこしスムーズに行ったかと悔しく思っています。

SQLって、いろんな発想が必要なんですね。

ありがとうございました。

投稿日時 - 2004-08-04 13:09:53

ANo.2

普段 PostgreSQL 使っているので微妙に SQL が
違うかもしれませんが・・・

DELETE FROM table WHERE id_no IN (
 SELECT id_no FROM table GROUP BY id_no HAVING max(status) = 0)

まず、table を id_no で GROUP BY します。
でそのグループごとに、status の最大値を求めます。
1が1つでも含まれたら 最大値は1になってしまいますよね。
だから、最大値が0ということは、すべてが0ってことです。

これらの id_no をサブクエリーの結果として返し
その is_no をすべて削除するって SQL になります。

もっと、簡単なクエリーがあるとは思いますが
取り急ぎ思いついたものを・・・

あっ、絶対バックアップとって実験してくださいね(^^;)

投稿日時 - 2004-08-04 00:32:39

お礼

なるほど、MAX関数を使うやりかたですね。いい発想ですね。確かに、一つでも含まれると最大値が変わる。

SQLだけでなく、他の言語でも使えそうな発想ですね。

ありがとうございました。

投稿日時 - 2004-08-04 13:01:51

ANo.1

環境がないので試せないのですが、以下のような感じでどうでしょう?
テーブルをAとしました。

delete from A where id_no not =
(select id_no from A where status = 1)

もしかしたら not = ではなく not in かもしれません。

投稿日時 - 2004-08-04 00:26:20

お礼

すばやい回答ありがとうございました。

サブクエリーを使って、”含まれないものを探す”みたいなイメージですかね。

ありがとうございました。

投稿日時 - 2004-08-04 12:36:08

あなたにオススメの質問