我有这些表格,我需要从" aeronave"进行更新。表比较" detalle_mantenimiento"的日期。
这就是我试图做的事情。
update (
select matricula, matricula_aeronave, fecha_termino, estado_id_estado
from aeronave
inner join aeronave_mantenimiento
on aeronave_mantenimiento.aeronave_matricula = aeronave.matricula
inner join mantenimiento
on mantenimiento.id_mantenimiento = aeronave_mantenimiento.mantenimiento_id_mantenimiento
inner join detalle_mantenimiento
on detalle_mantenimiento.mantenimiento_id_mantenimiento = mantenimiento.id_mantenimiento
WHERE detalle_mantenimiento.fecha_termino >= SYSDATE)
set estado_id_estado = 1;
但我遇到的错误如下:
"无法修改映射到非密钥保留表的列" *原因:尝试插入或更新连接视图的列 映射到非密钥保留的表。
选择它的工作,但我无法找到导致错误的原因。
答案 0 :(得分:1)
如果符合这些条件,可以更新Oracle中的联接 - 1.只更新一个基表 2.所有其他表都是密钥保留的:每个表对于基表的每一行必须至多有一行。
在你的情况下,这意味着,表aeronave_mantenimiento,mantenimiento或detalle_mantenimiento的键不是连接的键。这个链接有一个简单的例子来说明一个" Key-Preserved Table"是http://docs.oracle.com/cd/B28359_01/server.111/b28310/views001.htm#i1006318
您可能想要重写查询,尝试使用子查询而不是连接。这可能有所帮助。