在sql developer中更新表错误

时间:2013-07-27 01:28:44

标签: sql oracle11g

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

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:

请说明错误或错误解决方法的原因或原因。

谢谢,

2 个答案:

答案 0 :(得分:0)

假设您尝试更新salary表格中my_employees_above_avg表中last_name类似'%b%'的每个记录,那么这应该是您的意思寻找:

update my_employees_above_avg 
set salary = salary + 100
where last_name like '%b%'

答案 1 :(得分:0)

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

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

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

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