|
|
|
|
SELECTで取得した値でUPDATEする |
|
スポンサード リンク
サンプル表「dept」データ
|
SQL> select * from dept;
DEP DEPT_NAME
--- ----------
D01 総務部
D02 経理部
D04 営業部
D05 管理部 |
サンプル表「emp99」データ
|
SQL> select * from emp99;
EMP DEP DEPT_NAME EMP_NAME SALARY
--- --- ---------- ---------- ----------
E01 D01 ***** なまえ1 100
E02 D02 ***** なまえ2 200
E03 D03 ***** なまえ3 300
E04 D04 ***** なまえ4 400 |
例1) 表「emp99」の列「dept_name」を表「dept」の列「dept_name」の値で更新する
|
SQL> update
2 emp99 ep
3 set dept_name = (
4 select dp.dept_name
5 from dept dp
6 where ep.dept_id = dp.dept_id);
4行が更新されました。
SQL> select * from emp99;
EMP DEP DEPT_NAME EMP_NAME SALARY
--- --- ---------- ---------- ----------
E01 D01 総務部 なまえ1 100
E02 D02 経理部 なまえ2 200
E03 D03 なまえ3 300
E04 D04 営業部 なまえ4 400 |
SELECTの結果が無いレコードは、NULLで更新される。(E03のレコード)
例2) 例1)の更新で、表「dept」に対象のレコードが存在しない場合は更新しないようにする
|
SQL> update
2 emp99 ep
3 set dept_name = (
4 select dp.dept_name
5 from dept dp
6 where ep.dept_id = dp.dept_id)
8 where
9 exists( select 'X' from dept dd where ep.dept_id = dd.dept_id);
3行が更新されました。
SQL> select * from emp99;
EMP DEP DEPT_NAME EMP_NAME SALARY
--- --- ---------- ---------- ----------
E01 D01 総務部 なまえ1 100
E02 D02 経理部 なまえ2 200
E03 D03 ***** なまえ3 300
E04 D04 営業部 なまえ4 400 |
exists句を使用するこで、表「DEPT」に無いレコードは更新されずに「*****」のままとなる。
例3) SELECTした複数の項目でUPDATEするの場合の記述方法
|
update
emp ep
set (dept_name, dept_etc) = (
select dp.dept_name, dp.dept_etc
from dept dp
where ep.dept_id = dp.dept_id )
|
スポンサード リンク
|
|
|
|
|