当我尝试运行以下脚本时,出现错误:
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:
请说明错误或错误解决方法的原因或原因。
谢谢,
答案 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个部门。现在无法确定要在表中更新哪个子查询值。因此会抛出错误。
解决方案是确保子查询返回单行。
此外,如果只是为了更新工资,那么其他答案就会解释正确的方法。