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)