SELECT

2011-10-28 9 views
4

の結果を持つSQLアップデート私は、多数のユーザーに対してTotalNetWorthの計算を実行する広範なSQL SELECTを持っています。結果はTotalNetworthとUserです。これは、複数のレコードを含むことができます。例:SELECT

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

私は何をしたいTotalNetWorth値と私のUsersテーブル内のNetWorth列を更新し、キーとしてUserId = Users.Id。これについてはどうすればいいですか? hereを説明したように、その

UPDATE u 
FROM Users u 
JOIN tableTotalNetWorth t ON t.UserID = u.UserId 
+1

どのデータベースサーバーですか?答えは違うかもしれません。例えば、SQL Serverには、MySQLがないCTEがあります。 –

+0

@KenWhiteはそれが違いを生じたとは思わなかった。私はmySQLタグで更新しました。 – xdumaine

答えて

4

エイリアスサブクエリでJOINを使用できます。

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

これをテストし、 'FROM Users U'セクションでエラーを取得します。このセクションを削除すると、クエリが機能します。 – SAMPro

1

何かがあなたは、INSERT .... SELECT .... ON DUPLICATE KEY UPDATE ....を行うことができます。

1
CREATE TEMPORARY TABLE TempNetWorth AS (SELECT * FROM [your query]) 

UPDATE Users u, TempNetWorth t 
SET u.NetWorth = t.TotalNetWorth 
WHERE u.UserID = t.UserId 
+1

一時テーブルはここでは必要ありません。エイリアスサブクエリに対する単純な結合はうまくいくでしょう。 (私はダウン投票していないので、ただコメントをしていることに注意してください。) –

+0

@KenWhiteそれはうまくいった!それを答えてください! – xdumaine

0

よう

1

はあなたの選択を最初に行い、その後cte助けを借りて、すぐに更新

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

btw、SQL 2005以降で動作します –

0

あなたは、最初の一時テーブルにデータを引き出すために、あなたの大規模なSELECTクエリを使用すると言う「TEMP」とし、このクエリを使用してみてくださいする必要があります:

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

一時テーブルは必要ありません。サブクエリのエイリアスを行い、直接 'INNER JOIN'を実行できます。 –