【发布时间】:2008-10-23 15:30:37
【问题描述】:
我需要编写一个使用多个表来确定要更新哪些行的更新语句,因为在 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
)
谢谢! -内特
【问题讨论】: