您有两个子查询,并且如果您的数据基于标准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-我同意你的职位,我现在明白了。谢谢 –