我需要編寫一個更新語句,該語句使用多個表來確定要更新哪些行,因爲在Oracle中不允許有多個表。下面的查詢將返回一個「ORA-00971:缺少SET關鍵字」錯誤在Oracle更新語句中使用子查詢而不是表名
UPDATE
TABLE1 a,
TABLE2 b
SET
a.COL1 = 'VALUE'
WHERE
a.FK = b.PK
AND b.COL2 IN ('SET OF VALUES')
仰望甲骨文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
)
謝謝! -Net