2017-08-21 22 views
0

私は2つのテーブルを持っています。別のテーブルのデータを使用して1つのテーブルのレコードを更新する

表1:従業員

EID Name Gender 
1 Peter M 
2 John M 
3 Melissa F 

表2:

EID Salary 
1 6000 
2 8000 
3 10000 

給与は、私が15%、10%と女性従業員が男性社員の給与を上げる必要があります。

以下は、私が使用したが、Oracle11gで必要な結果を得ることができない問合せです。

merge into salary 
using employees on 
salary.eid = employees.eid 
when matched then 
update set 
    salary.salary = 1.1*salary where employee.gender = 'M' , 
    salary.salary = 1.15*salary where employee.gender = 'F'; 

私は、エラーメッセージの下になった:

SQL Error: ORA-00969: missing ON keyword 00969. 00000 - "missing ON keyword" *Cause:
*Action:

答えて

1

あなたが提供するスニペットに検討する必要がある2つのものがあります。

  1. ON句には必ず "()"を付ける必要があります。
  2. UPDATEステートメントのWHERE句が正しくありません。このスニペットが役立つことを願っています。

    MERGE INTO SALARY USING EMPLOYEES 
    ON (salary.eid = employees.eid) 
    WHEN MATCHED THEN 
        UPDATE 
        SET salary.salary = DECODE(employee.gender,'M',1.1*salary,'F',1.15*salary) ; 
    
0

ここで、SELECT文の必要はありませこの

Update salary 
set salary.salary=salary.salary*(select case t.gender when 'M' then 1.1 When 'F' then 1.15 end from employees t where t.eid= salary.eid) 
+0

を試してみてくださいません。 CASEまたはDECODEを使用できます。 –

関連する問題