Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

mise à jour sql (aidez-moi)

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é.