• 締切済み

金額が確定されなかった品物の価格履歴を削除する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 では、うまくいきません。 どのような文にすればいいか、わかる方、どうか教えていただけないでしょうか?

みんなの回答

回答No.2

訂正です、こちらで試してください。 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)

mshs
質問者

お礼

ありがとうございます。 やってみましたがダメです。 Maxを使っているので Group By が必要ですし そうすると、各品番のMax値がたくさん返されます。 残念ながら、それぞれの品番のKakutekiの最大値を判断することはできません。

回答No.1

こちらでは、期待通りにならないでしょうか 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年のブランク+未検証なので、だめもとで試してください。

関連するQ&A