我正在使用Oracle HR数据库。 我想知道为什么以下查询不起作用:
create table ecopy
as select *
from employees;
create table dcopy
as select *
from departments;
UPDATE (select d.location_id, e.salary
from ecopy e inner join dcopy d
on e.department_id=d.department_id)
set salary = salary+1
where location_id = 1800
SQL错误:ORA-01779:无法修改映射到非键->保留表的列
这是原始表上的工作:
UPDATE (select d.location_id, e.salary
from employees e inner join departments d
on e.department_id=d.department_id)
set salary = salary+1
where location_id = 1800
有人可以向我解释吗?
答案 0 :(得分:2)
以下是说明:
在现实生活中,您的关系受键支持-参考约束
employee.department_id(MANY) = departments.department_id(ONE)
在UPDATE
和JOIN
的情况下,您只能更新“ MANY”表中的列,并且只有它们具有实际引用时才可以更新。
您的Create as select. . .
表中肯定没有这些引用,因此Oracle优化器会抛出此错误。
这里有一些参考 Reference 1 Reference 2