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

Mettre à jour une table à l'aide de JOIN dans SQL Server ?

Vous n'avez pas tout à fait le propriétaire de SQL Server UPDATE FROM syntaxe vers le bas. Je ne sais pas non plus pourquoi vous deviez rejoindre le CommonField et aussi filtrer dessus par la suite. Essayez ceci :

UPDATE t1
  SET t1.CalculatedColumn = t2.[Calculated Column]
  FROM dbo.Table1 AS t1
  INNER JOIN dbo.Table2 AS t2
  ON t1.CommonField = t2.[Common Field]
  WHERE t1.BatchNo = '110';

Si vous faites quelque chose de vraiment stupide - comme essayer constamment de définir la valeur d'une colonne sur l'agrégat d'une autre colonne (ce qui viole le principe d'éviter de stocker des données redondantes), vous pouvez utiliser un CTE (expression de table commune) - voir ici et ici pour plus de détails :

;WITH t2 AS
(
  SELECT [key], CalculatedColumn = SUM(some_column)
    FROM dbo.table2
    GROUP BY [key]
)
UPDATE t1
  SET t1.CalculatedColumn = t2.CalculatedColumn
  FROM dbo.table1 AS t1
  INNER JOIN t2
  ON t1.[key] = t2.[key];

La raison pour laquelle c'est vraiment idiot, c'est que vous allez devoir réexécuter cette mise à jour entière à chaque fois qu'une ligne dans table2 changements. Une SUM est quelque chose que vous pouvez toujours calculer au moment de l'exécution et, ce faisant, vous n'avez jamais à vous soucier que le résultat soit obsolète.