2011-08-15 5 views
5

MySQLデータベーステーブルでは、UPDATEクエリの結果を含む行がいくつかあります。サブクエリを使用したSQLの更新カラム値

employeeIdのマッチングをしてnewSalarysalary

(SELECT employeeId, newSalary FROM ....) 
のため変更された値になってきて、例えば、私はテーブル

TABLE employees(
    employeeId int, 
    salary int, 
) 

を持っていると私は、以下のクエリに表示されUPDATE行のみにしたいです

私はもともとテンポラリテーブルに結果をロードすると思っていましたが、ここに示すようにSETの値を取得する方法がわかりません

UPDATE employees 
SET salary = (???) 
WHERE employeeId exists in tempTable 

あなたはこれが非正規化につながるとコメントしているかもしれませんが、私はこれを知っています。私はいくつかの "あなたはこれをやりたいとは思わない"と思われます。簡潔にするために、私は正当な理由があると仮定してください。

答えて

10

サブクエリに参加して、あなたのテーブルあなたのつもり更新:

UPDATE employees x INNER JOIN (
    SELECT employeeId, newSalary FROM .... 
) y ON x.employeeId=y.employeeId 
SET x.salary=y.newSalary 
1
update employees, tempTable 
set employees.salary=tempTable.newSalary 
wnere employees.employeeId=tempTable.employeeId; 
1
update employees 
inner join temptable 
on employees.employeeid = temptable.employeeid 
set employees.salary = temptable.newsalary 
関連する問題