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

Aktualisieren Sie eine Tabelle mit JOIN in SQL Server?

Sie haben nicht ganz das proprietäre UPDATE FROM von SQL Server Syntax nach unten. Sie sind sich auch nicht sicher, warum Sie dem CommonField beitreten mussten und danach auch danach filtern. Versuchen Sie Folgendes:

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';

Wenn Sie etwas wirklich Dummes tun – wie ständig zu versuchen, den Wert einer Spalte auf den Aggregatwert einer anderen Spalte zu setzen (was gegen das Prinzip der Vermeidung redundanter Datenspeicherung verstößt), können Sie einen CTE (Common Table Expression) verwenden – siehe hier und hier für weitere Details:

;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];

Der Grund, warum dies wirklich albern ist, ist, dass Sie dieses gesamte Update jedes Mal erneut ausführen müssen, wenn eine Zeile in table2 angezeigt wird Änderungen. Eine SUM ist etwas, das Sie immer zur Laufzeit berechnen können und sich dabei nie Sorgen machen müssen, dass das Ergebnis veraltet ist.