SQL met à jour une colonne pour égaler une colonne d'une jointure et utiliser une sous-requête

J'ai deux tables qui manipulent le stock et ont été désynchronisées récemment.

Les données doivent être mises à jour pour être à nouveau synchronisées et la tableB est toujours correcte. Nous tableB donc la mise à jour sur cette table et utilisons datatables de cette table pour mettre à jour la tableA .

J'essaye de mettre à jour via une jointure.

Avec le code ci-dessous, j'ai essayé plusieurs façons différentes de mettre à jour, par exemple en utilisant une instruction where sur le xcolumn2 , en supprimant la partie de sélection, etc.

Y a-t-il une syntaxe qui me manque ou suis-je dans la mauvaise direction?

 update tableA set tableA.columnA = tableB.columnA --select --tableA.xcolumn2, --tableA.columnA, --tableB.columnA, --from tableA as tableA left join (select xcolumn1, xcolumn2, sum(columnA) as columnA, sum(xcolumn3) as xcolumn3 from tableB as tableB group by xcolumn1, xcolumn2) as tableB on tableA.xcolumn2 = tableB.xcolumn2 group by tableA.xcolumn2, tableA.columnA, tableB.columnA, having sum(tableA.columnA) != sum(tableB.columnA) 

J'imagine que votre mise à jour devrait ressembler à ceci:

 UPDATE tableA SET tableA.columnA = tableB.columnA FROM tableA JOIN ( SELECT xcolumn1 , xcolumn2 , SUM(columnA) AS columnA FROM tableB AS tableB GROUP BY xcolumn1 , xcolumn2 ) AS tableB ON tableA.xcolumn2 = tableB.xcolumn2 AND tableA.xcolumn1 = tableB.xcolumn1 AND (tableA.columnA <> tableB.columnA OR tableA.columnA IS NULL)