您有兩個子查詢,並且如果您的數據基於標準HR模式的員工表,那麼兩者都會返回多行。
第二個很簡單;在=
需求是in
:
where employee_id in (select employee_id from employees
where commission_pct = 0.35)
...這在我的模式相匹配的employee
表中三行。 (雖然正如你所說你的sale_rep
表是從employees
填充,並有commission_pct
列,你不需要在這裏使用子查詢 - 篩選值存在於你正在更新的表上,所以你可能只需要做where commission_pct = 0.35
)。
第一個更困難,你需要定義你想要實際發生的事情。你可以,例如,從這些匹配挑薪水最高的指定job_id
:
set salary = (select max(salary) from employees
where job_id = 'SA_REP')
我挑選'SA_REP'
的,看起來像它可能是一個銷售代表,並且具有20個不同的值30級匹配的行在我的模式中。根據您的編輯,我的架構中有兩行,分別爲AD_VP
,但兩者的薪水相同;其中使用max()
可能是OK的情況下,或者你可以使用distinct
:
set salary = (select distinct salary from employees
where job_id = 'AD_VP')
但是,這是非常具體的,你必須在這個時間點的數據,所以它不會是一個很好的一般模式。
把這些在一起,你可以做:
select employee_id, salary from sale_rep where commission_pct = 0.35;
EMPLOYEE_ID SALARY
----------- ----------
156 10000
157 9500
158 9000
update sale_rep
set salary = (select max(salary) from employees
where job_id = 'AD_VP')
where employee_id in (select employee_id from employees
where commission_pct = 0.35);
3 rows updated.
select employee_id, salary from sale_rep where commission_pct = 0.35;
EMPLOYEE_ID SALARY
----------- ----------
156 17000
157 17000
158 17000
更普遍的有可能需要比對的提成比例的過濾器,你要更新的行,你就儘管選擇價值之間有着某種聯繫,其他,這與工作無關。這似乎是你想要在這種情況下,但。
'ad_vp'從哪裏來?你是否期望只有一個人擁有每個'job_id',或者所有僱員的薪水都相同?也許你可以添加一些樣本數據和預期的最終結果。 –
我試圖升級員工的薪水35%的佣金,以ad_vp –
@ Alex-我同意你的職位,我現在明白了。謝謝 –