t1とt2の間、またはt2とt3の間に1対多の関係がある場合、t1の各行に対して多くの一致が得られます。 t1の同じ行に属するt3のすべての行がdの同じ値を持っていることがわかっている場合は、DISTINCT
を使用できます。 (同一の)重複を削除します。
UPDATE table1 t1
SET t1.c = (select DISTINCT t3.d
from table2 t2, table3 t3
where t2.b = t3.b and t1.a = t2.a)
WHERE EXISTS ( SELECT 1 FROM table2 t2, table3 t3 WHERE t1.c = t3.c and t1.a = t2.a);