... der distinct heilt da nix (beides knallt, wenn das nicht eindeutig ist. Eigentlich müsste fetch first row only gehen (habe ich aber nicht ausprobiert, bei mir gibt es immer primary keys und stimmende key Beziehungen).
Ansonste macht man erst den update mit where exists, dann den insert mit where not exists (damit man nix unnötig doppelt macht).

D*B