Zoek eerst uit welke records moeten worden bijgewerkt:
select *
from tbl_order o
inner join tbl_group g on
g.grp_id = o.grp_id
inner join tbl_indicator i on
i.grp_nbr = g.grp_nbr
and i.sect_nbr = g.sect_nbr
where
g.indicat != i.indicat
Pas nu de query aan om die records bij te werken met de juiste grp_id. Merk op dat ik een extra join heb toegevoegd aan de tbl_group tabel met een alias van "g2". Dit is de juiste groep.
update o set
o.grp_id = g2.grp_id
from tbl_order o
inner join tbl_group g on
g.grp_id = o.grp_id
inner join tbl_indicator i on
i.grp_nbr = g.grp_nbr
and i.sect_nbr = g.sect_nbr
inner join tbl_group g2 on
g2.grp_nbr = i.grp_nbr
and g2.sect_nbr = i.sect_nbr
and g2.indicat = i.indicat
where
g.indicat != i.indicat
Houd er rekening mee dat vanwege de inner join op tbl_group g2 de records niet worden bijgewerkt als er geen tbl_group-record bestaat waarbij indicat overeenkomt met de indicat-waarde van het bijbehorende tbl_indicator-record.