Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Update (hilf mir)

Finden Sie zuerst heraus, welche Datensätze aktualisiert werden müssen:

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

Ändern Sie nun die Abfrage, um diese Datensätze mit der richtigen grp_id zu aktualisieren. Beachten Sie, dass ich der Tabelle tbl_group einen zusätzlichen Join mit dem Alias ​​„g2“ hinzugefügt habe. Dies ist die richtige Gruppe.

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

Beachten Sie, dass aufgrund des inneren Joins auf tbl_group g2 die Datensätze nicht aktualisiert werden, wenn es keinen tbl_group-Datensatz gibt, bei dem indicat mit dem indicat-Wert des zugehörigen tbl_indicator-Datensatzes übereinstimmt.