sql – 在Oracle Update Statement中使用子查询而不是表名
发布时间:2020-12-12 16:37:36 所属栏目:MsSql教程 来源:网络整理
导读:我需要编写一个使用多个表来确定要更新哪些行的更新语句,因为在Oracle中,不允许有多个表.以下查询将返回“ORA-00971:缺少SET关键字”错误 UPDATE TABLE1 a,TABLE2 bSET a.COL1 = 'VALUE'WHERE a.FK = b.PK AND b.COL2 IN ('SET OF VALUES') 查看oracle上的UP
我需要编写一个使用多个表来确定要更新哪些行的更新语句,因为在Oracle中,不允许有多个表.以下查询将返回“ORA-00971:缺少SET关键字”错误
UPDATE TABLE1 a,TABLE2 b SET a.COL1 = 'VALUE' WHERE a.FK = b.PK AND b.COL2 IN ('SET OF VALUES') 查看oracle上的UPDATE语句语法,我发现以下link,这表明您可以使用一个子查询代替一个表名. 当我试图写这样的查询时,我得到一个“ORA-01779:不能修改映射到非密钥保留表的列” UPDATE ( SELECT a.COL1 FROM TABLE1 a,TABLE2 b WHERE a.FK = b.PK AND b.COL2 IN ('SET OF VALUES') ) update_tbl SET update_tbl.COL1 = 'VALUE' 我使用EXISTS语句改写了查询(如下所示),它的工作正常,但仍然想知道如何完成. UPDATE TABLE1 update_tbl SET update_tbl.COL1 = 'VALUE' WHERE EXISTS ( SELECT 1 FROM TABLE1 a TABLE2 b WHERE a.FK = b.PK AND b.COL2 IN ('SET OF VALUES') AND update_tbl.PK = a.PK ) 谢谢! 解决方法另一个选择:UPDATE TABLE1 a SET a.COL1 = 'VALUE' WHERE a.FK IN ( SELECT b.PK FROM TABLE2 b WHERE b.COL2 IN ('SET OF VALUES') ) 如果(a)视图包含TABLE1声明的PK,您的第二个例子将会起作用: UPDATE ( SELECT a.COL1,a.PKCOL FROM TABLE1 a,TABLE2 b WHERE a.FK = b.PK AND b.COL2 IN ('SET OF VALUES') ) update_tbl SET update_tbl.COL1 = 'VALUE' …和(b)TABLE1.FK是TABLE2的声明的外键 (通过声明我的意思是约束存在并被启用). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |