Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiornare una tabella usando JOIN in SQL Server?

Non hai ancora UPDATE FROM proprietario di SQL Server sintassi giù. Inoltre, non sono sicuro del motivo per cui dovevi unirti a CommonField e anche filtrare su di esso in seguito. Prova questo:

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

Se stai facendo qualcosa di veramente stupido, come cercare costantemente di impostare il valore di una colonna sull'aggregato di un'altra colonna (che viola il principio di evitare la memorizzazione di dati ridondanti), puoi usare un CTE (espressione di tabella comune) - vedi qui e qui per maggiori dettagli:

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

Il motivo per cui è davvero sciocco è che dovrai rieseguire l'intero aggiornamento ogni singola riga in table2 i cambiamenti. Una SUM è qualcosa che puoi sempre calcolare in fase di esecuzione e, così facendo, non devi mai preoccuparti che il risultato sia obsoleto.