foo.aをNULLにしようとする更新には2つの理由が考えられます。
- fooには、barに一致する行がない行があります。
- バーの一致する行のbar.xがnullです。
上記の条件のいずれかが当てはまる場合、以下はfooへの更新を除外します。そのような場合、foo.aはそのまま残ります:
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);