Se houver uma relação um-para-muitos entre t1 e t2 ou entre t2 e t3, você obterá muitas correspondências para cada linha em t1. Se você sabe que todas as linhas em t3 que pertencem à mesma linha em t1 têm o mesmo valor em d, então você pode usar
DISTINCT
para remover duplicatas (idênticas). 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);