sql >> Databáze >  >> RDS >> Sqlserver

Aktualizovat tabulku pomocí JOIN na SQL Server?

Nemáte zcela vlastní proprietární UPDATE FROM SQL Serveru dolů syntaxe. Také si nejste jisti, proč jste se potřebovali připojit k CommonField a poté na něj také filtrovat. Zkuste toto:

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

Pokud děláte něco opravdu hloupého - například se neustále snažíte nastavit hodnotu jednoho sloupce na agregaci jiného sloupce (což porušuje zásadu vyhnout se ukládání nadbytečných dat), můžete použít CTE (běžný tabulkový výraz) - viz zde a zde pro více podrobností:

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

Důvod, proč je to opravdu hloupé, je ten, že celou tuto aktualizaci budete muset znovu spustit pokaždé, když jakýkoli řádek v table2 Změny. SUM je něco, co můžete vždy vypočítat za běhu, a přitom se nemusíte bát, že výsledek je zastaralý.



  1. Rychlé a špinavé pro smyčky v okamžitém okně

  2. Oracle SQL:Sloupec není povolen

  3. Bezplatné metody pro opravu korupce indexu SQL Server

  4. ORA-28001:Platnost hesla vypršela