Мне нужно написать инструкцию обновления, в которой использовались несколько таблиц, чтобы определить, какие строки нужно обновлять, поскольку в 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')
Поднимая синтаксис инструкции 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