gpt4 book ai didi

sql - 创建表作为选择,然后在 Oracle 中使用 JOIN 更新语句

转载 作者:行者123 更新时间:2023-12-02 00:52:16 25 4
gpt4 key购买 nike

我正在使用 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 Error: ORA-01779: cannot modify a column which maps to a non key->preserved table



而这个,在原始表上正在做它的工作:
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

谁能给我解释一下?

最佳答案

这是解释:

在您的现实生活中,您的关系由键支持 - 引用约束

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

UPDATE的情况下与 JOIN ,您只能更新“MANY”表中的列,并且仅当它们具有实际引用时。

您的 Create as select. . .表绝对没有这些引用,因此 Oracle 优化器会引发此错误。

这里有一些引用
Reference 1
Reference 2

关于sql - 创建表作为选择,然后在 Oracle 中使用 JOIN 更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56692986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com