0

当我尝试运行以下脚本时,出现错误:

update my_employees_above_avg set (employee_id, first_name, last_name, salary) =
(select employee_id, first_name, last_name, (salary + 100) NewSalary
from my_employees_above_avg
where last_name like '%b%');

出现以下错误:

从命令中的第 40 行开始出错:

update my_employees_above_avg set (employee_id, first_name, last_name, salary) =
(select employee_id, first_name, last_name, (salary + 100) NewSalary
from my_employees_above_avg
where last_name like '%b%')

错误报告:

SQL Error: ORA-01427: single-row subquery returns more than one row
01427. 00000 -  "single-row subquery returns more than one row"
*Cause:    
*Action:

请建议它给我错误的原因或原因,或者我如何解决此错误。

谢谢,

4

2 回答 2

0

假设您正在尝试为每条类似于 '%b%' 的记录更新表中的salary字段,那么这应该是您要查找的内容:my_employees_above_avglast_name

update my_employees_above_avg 
set salary = salary + 100
where last_name like '%b%'
于 2013-07-27T01:39:47.047 回答
0

您的查询的问题是您正在尝试更新表employee_id, first_name, last_name, salary的所有行中的列,并且您的子查询返回多行。所以 oracle 无法决定在列中更新哪个结果行。它非常合乎逻辑。

例如,我想更新表中所有员工的部门,我的子查询返回 3 个部门。现在没有办法决定在表中更新哪个子查询的值。因此会抛出错误。

解决方案是确保子查询返回单行。

此外,如果只是为了更新薪水,那么其他答案解释了正确的方法。

于 2013-07-27T02:59:03.357 回答