質問があるのですが、よろしくお願いいたします。
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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- メディア・マスコミ マスクしつづける方は 緊急事態条項・パンデミック条約について どう捉えていますか? 2 2023/03/21 11:44
- 医療・安全 マスクしつづける方は 緊急事態条項・パンデミック条約について どう捉えていますか? 8 2023/03/18 20:27
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(プログラミング・Web制作) Arduinoに関する質問 4 2023/08/07 21:19
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
orace 変更表エラーを回避する...
-
SQLを考えてます。
-
GROUP BYを行った後に結合した...
-
レコードが存在しなかった場合
-
Excelで、改行がある場合の条件...
-
ファイル書込みで一行もしくは...
-
[VBA] ADOの Clone と AddNew
-
Excelでセルの書式設定を使用し...
-
SELECTで1件のみ取得するには?
-
ADO VBA 実行時エラー3021
-
Accessで別テーブルの値をフォ...
-
select insertで複数テーブルか...
-
sum()の出力結果順に並び替えを...
-
ACCESSの集計クエリで3件ある...
-
SQL>UPDATEと同時にその件数を...
-
Date型にNULLをセットしたい V...
-
Oracleでの文字列連結サイズの上限
-
VB6.0のIsNull関数に相当するもの
-
使うべきでない文字。
-
ACCESSで大量の更新を行うと「...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
こういうSELECTは可能でしょうか?
-
★アクセス2000★条件付き合計金...
-
orace 変更表エラーを回避する...
-
Oracle SQL 2つのテーブルを使...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
-
select句副問い合わせ 値の個...
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを使ったSELECT文の総...
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
-
select insertで複数テーブルか...
-
JSPのNULLレコード表示について...
-
レコードが存在しなかった場合
-
Access終了時の最適化が失敗?
-
実績累計の求め方と意味を教え...
-
sqlplusの処理が途中でとまる
-
Excelでセルの書式設定を使用し...
おすすめ情報