sql - Nullify column in update if subquery returns empty -


i have following sql query

update container  set member_containers = members  ( select inter_container_membership.owning_container_id owner_cont       ,array_to_string(array_agg(inter_container_membership.member_container_id),',') members inter_container_membership  group inter_container_membership.owning_container_id) v container.id = owner_cont;  

the problem is, if sub-query not return member_containers not updated, need set null if it's case, i've tried using exists clause didn't work.

update container  set member_containers =       case when exists (           select * inter_container_membership           container.id  = inter_container_membership.owning_container_id           ) members      else null end  ( select inter_container_membership.owning_container_id owner_cont       ,array_to_string(array_agg(inter_container_membership.member_container_id),',') members inter_container_membership  group inter_container_membership.owning_container_id) v container.id = owner_cont; 

so thinking of nullifying out member_containers before updating it, not find way doing that.

to set column null in case subquery not find anything, could use correlated subquery instead of join:

update container c set    member_containers = (    select string_agg(member_container_id, ',')      inter_container_membership     i.owning_container_id = c.id    group  owning_container_id    ); 

often, kind of query wrong, because column shouldn't nullified if nothing found. seem want that.
also, correlated subqueries tend slow. consider add left join instead (doing same):

update container c set    member_containers = i.members   container c1 left   join (    select owning_container_id          ,string_agg(member_container_id, ',') members      inter_container_membership     group  1    ) on i.owning_container_id = c1.id c.id = c1.id; 

also using string_agg() instead of array_to_string(array_agg(...)). needs postgres 9.0+.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -