- 締切済み
金額が確定されなかった品物の価格履歴を削除するDelete文
各品物の価格変動の履歴と確定値を残す 下のようなテーブル(T_Rireki)があるとします。 | HinBan | Junban | Nedan | Kakuteki | ---------------------------------------- | A | 1 | 90 | 0 | | A | 2 | 80 | 0 | | A | 3 | 70 | 1 | | B | 1 | 95 | 0 | | B | 2 | 90 | 0 | | B | 3 | 95 | 0 | | C | 1 | 35 | 0 | | C | 2 | 30 | 1 | ここから、値段が確定していない( 列 Kakutei の値が 最終的に 1 になっていない) 品番を探し(この場合は、B) それをテーブルから削除したいのです。 目的の行の抽出は、 Select * from T_Rireki as T1 Where (select Max(Kakuteki) from T_rireki where HinBan= T1.HinBan) = 0 もしくは、 Select HinBan , Max(Kakuteki) as M_Kakutei from T_Rireki group by Hinban Having M_Kakutei = 0 などによって、 | HinBan | Nedan | -------------------- | B | 95 | | B | 90 | | B | 95 | の目的の3行を得ることができますが、この3行を削除するためにDelete文に上記のSQLを含もうとするとエラーがでます。 例えば、 Delete from T_Rireki as T1 Where (select Max(Kakuteki) from T_rireki where HinBan= T1.HinBan) = 0 では、うまくいきません。 どのような文にすればいいか、わかる方、どうか教えていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- neko2koban
- ベストアンサー率39% (49/125)
訂正です、こちらで試してください。 Delete from T_Rireki as T1 Where T1.HinBan = (select HinBan from (select HinBan, Max(Kakuteki) as M_Kakuteki from T_rireki) where M_Kakuteki = 0)
- neko2koban
- ベストアンサー率39% (49/125)
こちらでは、期待通りにならないでしょうか Delete from T_Rireki as T1, (select HinBan, Max(Kakuteki) as M_Kakuteki from T_rireki) as T2 Where T1.HinBan = T2.HinBan and T2.M_Kakuteki = 0 Oracle8iでこうしていた経験があるのですが、3年のブランク+未検証なので、だめもとで試してください。
お礼
ありがとうございます。 やってみましたがダメです。 Maxを使っているので Group By が必要ですし そうすると、各品番のMax値がたくさん返されます。 残念ながら、それぞれの品番のKakutekiの最大値を判断することはできません。