如何在单个查询中更新多个表中的多个列?
我尝试过以下但没有成功。
update Class c, School s
set c.Status='Absent', s.Status='Absent'
Where c.ID='&ID' and c.ID=s.ID;
任何线索都很明显。
答案 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对模糊关系思维的容忍程度要低得多。