sql >> Databasteknik >  >> RDS >> Sqlserver

Uppdatera en tabell med JOIN i SQL Server?

Du har inte riktigt SQL Servers proprietära UPDATE FROM syntax ner. Osäker på varför du behövde gå med på CommonField och även filtrera på det efteråt. Prova detta:

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

Om du gör något riktigt dumt - som att ständigt försöka sätta värdet på en kolumn till aggregatet av en annan kolumn (vilket bryter mot principen att undvika att lagra överflödig data), kan du använda en CTE (common table expression) - se här och här för mer information:

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

Anledningen till att detta är riktigt dumt är att du kommer att behöva köra om hela den här uppdateringen varje gång som helst i table2 ändringar. En SUM är något du alltid kan beräkna under körning och, på så sätt, aldrig behöver oroa dig för att resultatet är inaktuellt.



  1. Postgres släpptabell syntaxfel

  2. Bygga en mycket tillgänglig databas för Moodle med MySQL-replikering

  3. Skapa en testmiljö från ett produktionslager

  4. ML{.NET} Introduktion