我需要编写一个更新语句,使用多个表来确定要更新哪些行。因为在Oracle中,不允许使用多个表进行更新。以下查询将返回“ORA-00971: Missing SET keyword”错误。
UPDATE
TABLE1 a,
TABLE2 b
SET
a.COL1 = 'VALUE'
WHERE
a.FK = b.PK
AND b.COL2 IN ('SET OF VALUES')
在Oracle上查找UPDATE语句语法时,我发现以下链接显示可以在表名的位置使用子查询。但是当我尝试像这样编写查询时,出现了“ORA-01779: Cannot modify a column which maps to a non key-preserved table”错误提示。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
)
谢谢! -Nate