从选择Oracle更新

时间:2016-10-22 03:30:07

标签: oracle

我有这些表格,我需要从" aeronave"进行更新。表比较" detalle_mantenimiento"的日期。

http://prntscr.com/cxds08

这就是我试图做的事情。

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;

但我遇到的错误如下:

  

"无法修改映射到非密钥保留表的列"   *原因:尝试插入或更新连接视图的列              映射到非密钥保留的表。

选择它的工作,但我无法找到导致错误的原因。

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

您可能想要重写查询,尝试使用子查询而不是连接。这可能有所帮助。