Beim Update klappt das wieder mit dem fetch first..., da es sich um einen scalaren Subselect und keinen Join handelt:

update myfile a
set f1 = (
select f1 from file2 b inner join file3 c on b.key = c.key
where a.key = b.key
fetch first 1 rows only)

where exists (select * from file2 e where e.key=a.key)

Der scalare subselect wird hier wieder je Zeie ausgeführt.
Die Schluss-Whereklausel ist u.U. erforderlich, wenn der Subslect den Schlüssel nicht findet.

Falls mehrere Felder geändert werden sollen:

set (f1, f2, f3) = (select f1, f2, f3 from ....)