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

Opdatere en tabel ved hjælp af JOIN i SQL Server?

Du har ikke helt SQL Servers proprietære UPDATE FROM syntaks ned. Er heller ikke sikker på, hvorfor du skulle deltage på CommonField og filtrer også på det bagefter. Prøv dette:

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

Hvis du laver noget virkelig fjollet - som konstant at forsøge at sætte værdien af ​​en kolonne til aggregatet af en anden kolonne (hvilket er i strid med princippet om at undgå lagring af overflødige data), kan du bruge et CTE (common table expression) - se her og her for flere detaljer:

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

Grunden til, at dette er virkelig fjollet, er, at du bliver nødt til at køre hele denne opdatering igen hver gang en række i table2 ændringer. En SUM er noget, du altid kan beregne under kørslen, og ved at gøre det behøver du aldrig bekymre dig om, at resultatet er forældet.



  1. Sjovt med (columnstore) komprimering på et meget stort bord – del 2

  2. Sådan gendannes en enkelt MySQL-tabel ved hjælp af mysqldump?

  3. PL/SQL Stærk Ref Cursor Med Brugerdefineret Record Datatype

  4. Enkelte citater, dobbelte citater og backticks i MySQL