
質問があるのですが、よろしくお願いいたします。
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なので、消す
お解りの方、アドバイスを頂ければ幸いです。
よろしくお願いします。
No.4
- 回答日時:
DELETE FROM 待ち合わせ
WHERE id_no NOT IN (SELECT id_no FROM 待ち合わせ WHERE status <> 0 GROUP BY id_no)
ではいかがでしょうか?
NOTを使うっていう、発想がでてくれば、もうすこしスムーズに行ったかと悔しく思っています。
SQLって、いろんな発想が必要なんですね。
ありがとうございました。
No.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 になります。
もっと、簡単なクエリーがあるとは思いますが
取り急ぎ思いついたものを・・・
あっ、絶対バックアップとって実験してくださいね(^^;)
なるほど、MAX関数を使うやりかたですね。いい発想ですね。確かに、一つでも含まれると最大値が変わる。
SQLだけでなく、他の言語でも使えそうな発想ですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こういうDELETE文を作成したい...
-
実績累計の求め方と意味を教え...
-
決定性有限オートマトン
-
エクセルデータの末尾の改行を...
-
レコード長を数えてくれる関数
-
【SQL】existsでの商演算
-
DataGridViewにてセル以外をク...
-
ワードの差込印刷で教えて下さ...
-
select文でフリーズします。
-
ACCESS VBA レコードセットの参...
-
SELECTで1件のみ取得するには?
-
カレントレコードが無い事を判...
-
DAO、ADOについて
-
チェックボックスの項目をDBにi...
-
改行コード
-
ACCESSのクエリで同じSQL文だが...
-
アクセス クエリ-で空白以外の...
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
半角英数字混在データから数字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLの作成について
-
結合のSELECT文の記述の仕方
-
selectの内容によって、登録す...
-
集計のSQLについて
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
OracleのSQL*PLUSで、デー...
-
Accessで別テーブルの値をフォ...
-
決定性有限オートマトン
-
select insertで複数テーブルか...
-
DataGridViewの、選択されてい...
-
ファイル書込みで一行もしくは...
-
レコードが存在しなかった場合
-
ADO VBA 実行時エラー3021
-
最新の日付とその金額をクエリ...
-
実績累計の求め方と意味を教え...
-
Date型にNULLをセットしたい V...
-
SELECTで1件のみ取得するには?
-
Excelでセルの書式設定を使用し...
-
select句副問い合わせ 値の個...
おすすめ情報