创建表为Select,然后在Oracle中使用JOIN更新语句

时间:2019-06-20 19:50:24

标签: sql oracle

我正在使用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

有人可以向我解释吗?

1 个答案:

答案 0 :(得分:2)

以下是说明:

在现实生活中,您的关系受键支持-参考约束

employee.department_id(MANY) = departments.department_id(ONE)

UPDATEJOIN的情况下,您只能更新“ MANY”表中的列,并且只有它们具有实际引用时才可以更新。

您的Create as select. . .表中肯定没有这些引用,因此Oracle优化器会抛出此错误。

这里有一些参考 Reference 1 Reference 2