sql >> Database >  >> RDS >> Sqlserver

Een tabel bijwerken met JOIN in SQL Server?

Je hebt niet helemaal de eigen UPDATE FROM van SQL Server syntaxis omlaag. Weet ook niet waarom je mee moest doen op het CommonField en er daarna ook op filteren. Probeer dit:

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

Als je iets heel doms doet - zoals constant proberen de waarde van een kolom in te stellen op het totaal van een andere kolom (wat in strijd is met het principe om overbodige gegevens niet op te slaan), kun je een CTE (common table expression) gebruiken - zie hier en hier voor meer 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];

De reden dat dit echt dwaas is, is dat je deze hele update elke keer opnieuw moet uitvoeren in een rij in table2 veranderingen. Een SUM is iets dat u altijd tijdens runtime kunt berekenen en daarbij hoeft u zich nooit zorgen te maken dat het resultaat oud is.



  1. Spring Data JPA Auditing werkt niet voor de JpaRepository-updatemethode met @Modifying-annotatie, waarom?

  2. TPC-H-prestaties sinds PostgreSQL 8.3

  3. psql:FATAL:database <gebruiker> bestaat niet

  4. Hoe de maand- en dagnamen in een andere taal in MariaDB te retourneren