Мне нужно написать оператор обновления, который использовал несколько таблиц, чтобы определить, какие строки обновлять, поскольку в 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')
Просматривая синтаксис оператора UPDATE для oracle, я обнаружил следующую ссылку , которая показывает, что вы можете использовать подзапрос вместо имени таблицы.
Когда я пытался написать запрос, подобный этому, я получил «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
)
Спасибо!
-Nate