如何更新多个表中的多个列

时间:2017-04-07 09:20:27

标签: sql oracle

如何在单个查询中更新多个表中的多个列?

我尝试过以下但没有成功。

My tables

update Class c, School s
set c.Status='Absent', s.Status='Absent'
Where c.ID='&ID' and c.ID=s.ID;

任何线索都很明显。

1 个答案:

答案 0 :(得分:0)

您无法直接更新Oracle中的多个表。

您可以更新视图,如下所示:

update (
select c.status class_status, s.status school_status
from Class c, School s
Where c.ID='&ID' and c.ID=s.ID )
set class_status='Absent', school_status='Absent'

如果表之间的连接保留了密钥,则Oracle将仅允许这一点 - 即,由连接生成的每一行直接映射到正在更新的源表中的单个行。我怀疑在这种情况下,School不是密钥保留的,因为该表中的每一行可能与Class中的多行有关。所以你不能在一个声明中做到这一点。

与其他系统相比,Oracle对模糊关系思维的容忍程度要低得多。