SQL質疑応答スレ 10問目

このエントリーをはてなブックマークに追加
78NAME IS NULL
SQLを仕事で書いてますが、困ってます。

○テーブルA
number
nendo
gaku
riyu

○テーブルB
number
code

テーブルAのgakuの値を更新するSQLを作りたいです。条件は

・テーブルAのriyu <> -1の全てのレコードのgakuに値をセットする。
セットする値は、レコードそれぞれのnumberでテーブルAとテーブルB
 を結合して、テーブルBのcode=1なら1000,code=2なら2000、code=3なら3000

以下のようなSQLを書きましたがうまくいきません。


update テーブルA a set gaku = (
select
case
WHEN b.code = 1 1000
WHEN b.code = 2 2000
WHEN b.code = 3 3000
ELSE 0
END gaku
from テーブルA a,テーブルB b
where a.number = b.number
and (a.number,a.nendo) IN ( select number,nendo from テーブルA where riyu <> -1 )
)
where (a.number,a.nendo) IN ( select number,nendo from テーブルA where riyu <> -1 )


DBはOracle10gです。
よろしくお願いします。