Update mit Subselect MUSS genau eine 1:1-Beziehung liefern.
D.h.: in der Where-Bedingung muss der gesamte eindeutige Schlüssel genannt werden.

update ufile a set ... = (
select ... from qfile b where a.key=b.key)
where a.key in (select c.key from qfile c where ...)

.key muss der gesamte Schlüssel (a.key1=b.key1 and ...) sein, bei der in-Klausel darf ja leider nur ein Feld benannt werden, dieses muss dann zusammengebaut werden:

a.key1 concat a.key2 ... = c.key1 concat c.key2 ...

Ist eines der Felder numerisch, kann es per DIGITS bzw. CHAR in Alpha gecastet werden.

Dieses Problem ist in verschiedensten Varianten hier bereits beschrieben.