SQL Update mit Ergebnissen von SELECT

Ich habe eine umfangreiche SQL SELECT, die eine Berechnung von TotalNetWorth für eine Anzahl von Benutzern durchführt. Das Ergebnis ist das TotalNetworth und der Benutzer. Dies kann mehrere datasätze enthalten. Beispiel:

------------------------- |TotalNetWorth | UserId | ------------------------- | 24.45 | 1 | | 45.34 | 3 | ------------------------- 

Ich möchte die NetWorth Spalte in meiner Users Tabelle mit dem TotalNetWorth Wert und UserId = Users.Id als Schlüssel Users.Id . Was ist der beste path, dies zu tun?

Sie können einen JOIN für eine Alias-Unterabfrage verwenden.

 UPDATE Users FROM Users u INNER JOIN (SELECT WhatEver FROM YourQueryThatCalcsNetWorth) nw ON nw.UserID = u.UserId 

So ähnlich

 UPDATE u FROM Users u JOIN tableTotalNetWorth t ON t.UserID = u.UserId 
 CREATE TEMPORARY TABLE TempNetWorth AS (SELECT * FROM [your query]) UPDATE Users u, TempNetWorth t SET u.NetWorth = t.TotalNetWorth WHERE u.UserID = t.UserId 

cte Sie zuerst und dann sofort mit Hilfe von cte aktualisieren

 WITH cte_query AS ( SELECT TotalNetWorth = <calculate_total> FROM [Users]) UPDATE cte_query SET TotalNetWorth = TotalNetWorth; 

Sie könnten eine INSERT .... SELECT .... ON DUPLICATE KEY UPDATE .... , wie hier erläutert.

Möglicherweise müssen Sie Ihre umfangreiche SELECT-Abfrage verwenden, um data zuerst in eine temporäre Tabelle zu ziehen, sagen Sie "temp" und versuchen Sie dann, diese Abfrage zu verwenden:

 Update Users set NetWorth = (select TotalNetWorth from temp where Users.Id = temp.UserId)