2017-08-14 16 views
0

以下のコード(現在はエラーが発生しています)はテーブル内のすべての行を更新しますが、コードはのp.hourのみを更新する必要があります。更新プログラムで2つの結合を結合するにはどうすればよいですか?

これは私の現在のエラーでテーブル部門からのセットの値が列フォームテーブルの労働者と一つであることを

update worker 
set p_hour = p_hour + a.hour 
where exists 
(select 
p.per_id, 
p.p_hour 
from 
worker p, 
department a 
where 
p.per_id = a.per_id and 
p.per_id = '1234') 

重要です。

ERROR at line 2: ORA-00904: "a.hour": invalid identifier

+0

'where'節から' set'でテーブルを参照することはできません。代わりにhttps://stackoverflow.com/a/7031405/1398418を参照してください。 – Oleg

答えて

0

Oracleで標準的な方法は次のとおりです。

update worker w 
    set p_hour = (p_hour + 
        (select d.hour 
        from department d 
        where w.per_id = d.per_id 
       ) 
       ) 
    where w.per_id = '1234' and 
      exists (select 1 
        from department d 
        where w.per_id = d.per_id 
       ); 

mergeも使用できます。

0

ます。また、それ以外の場合は、インラインまたは更新可能な結合ビューを使用することができます許可する。このために

update (
     select e.employee_id, e.salary, d.department_name 
     from employees e 
       join departments d on d.department_id = e.department_id 
     ) 
set salary = salary * 10 
where department_name = 'Finance'; 

を、ビューがキー保存なければなりません。この例では、departments.department_idに一意のキーまたはインデックスがあるため、従業員を更新できます。

関連する問題