Il y a deux raisons possibles pour que la mise à jour tente de faire passer foo.a à NULL.
- Il existe des lignes dans foo pour lesquelles il n'y a pas de lignes correspondantes dans bar.
- La ligne correspondante dans bar a bar.x de null.
Ce qui suit exclura les mises à jour de foo si l'une des conditions ci-dessus est vraie. Dans ces cas, foo.a restera tel quel :
update foo
set a = (select distinct( x ) from bar where bar.y = foo.b )
where exists
(select *
from bar
where bar.y = foo.b
and bar.x is not null);