Trước tiên, hãy tìm ra bản ghi nào cần được cập nhật:
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
Bây giờ, hãy sửa đổi truy vấn để cập nhật các bản ghi đó với grp_id chính xác. Lưu ý rằng tôi đã thêm một phép nối bổ sung vào bảng tbl_group với bí danh là "g2". Đây sẽ là nhóm chính xác.
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
Lưu ý rằng do liên kết bên trong trên tbl_group g2, các bản ghi sẽ không được cập nhật nếu không tồn tại bất kỳ bản ghi tbl_group nào trong đó chỉ báo khớp với giá trị chỉ báo của bản ghi tbl_indicator được liên kết với nó.