Tout d'abord, déterminez quels enregistrements doivent être mis à jour :
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
Maintenant, modifiez la requête pour mettre à jour ces enregistrements avec le grp_id correct. Notez que j'ai ajouté une jointure supplémentaire à la table tbl_group avec un alias de "g2". Ce sera le bon groupe.
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
Notez qu'en raison de la jointure interne sur tbl_group g2, les enregistrements ne seront pas mis à jour s'il n'existe aucun enregistrement tbl_group où indicat correspond à la valeur indicat de son enregistrement tbl_indicator associé.