Najpierw ustal, które rekordy wymagają aktualizacji:
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
Teraz zmodyfikuj zapytanie, aby zaktualizować te rekordy z poprawnym identyfikatorem grp_id. Zauważ, że dodałem dodatkowe sprzężenie do tabeli tbl_group z aliasem "g2". To będzie właściwa grupa.
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
Zwróć uwagę, że z powodu wewnętrznego sprzężenia w tbl_group g2, rekordy nie zostaną zaktualizowane, jeśli nie istnieje żaden rekord tbl_group, w którym indicat odpowiada wartości indicat powiązanego z nim rekordu tbl_indicator.