Denna syntax fungerar inte i Oracle SQL.
I Oracle kan du uppdatera en join om tabellerna är "nyckelbevarade", dvs:
UPDATE (SELECT a.val_a, b.val_b
FROM table a
JOIN table b ON a.b_pk = b.b_pk)
SET val_a = val_b
Förutsatt att b_pk
är den primära nyckeln för b
, här är sammanfogningen uppdateringsbar eftersom det för varje rad i A finns högst en rad från B, därför är uppdateringen deterministisk.
I ditt fall eftersom det uppdaterade värdet inte beror på en annan tabell kan du använda en enkel uppdatering med ett EXIST-villkor, ungefär så här:
UPDATE mytable t
SET t.VALUE = 'value'
WHERE EXISTS
(SELECT NULL
FROM tableb b
INNER JOIN tablec c ON c.id = b.id
INNER JOIN tabled d ON d.id = c.id
WHERE t.id = b.id
AND d.key = 1)